在回调中终止mongodb连接
Terminate mongodb connection in a callback
我只是在学习mongojs和nodejs,所以我仍在努力习惯异步编程。我的程序应该做的是从文件("列表")中获取输入,读取每一行,并将行传递给解析函数,该函数将数据写入文件并将数据写入数据库。
这是我的index.js:
var read_list = require('./read_list').read_list;
var parse = require('./parse');
var databaseUrl = "mydb";
var collections = ["patents"]
var db = require("mongojs").connect(databaseUrl, collections);
read_list(filename, array, parse, database, function(err) {
if(err) throw err;
db.close();
});
read_list.js:
var fs = require('fs');
var tmp = "http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1="
function read_list(file_name, pat_array, parse, db) {
fs.readFile(file_name, function(err, data) {
if(err) throw err;
else {
pat_array = data.toString().split("'n");
for(var i = 0; i < pat_array.length; i++) {
parse(tmp+pat_array[i]+".PN.&OS=PN/"+pat_array[i]+"&RS=PN/"+pat_array[i], pat_array[i], db);
}
}
});
}
exports.read_list = read_list
最后解析.js:
var fs = require('fs');
var cheerio = require('cheerio');
var request = require('request');
function parse(url, filename, db) {
request(url, function(err, response, body) {
if (err)
throw err;
body = body.substring(body.indexOf("United States Patent", 43), body.indexOf("* * * * *"));
$ = cheerio.load(body);
var elems = new Array();
$("TD").each(function() {
if($(this).text())
{
elems.push($(this).text().trim());
}
})
var pat_title = $("font").text().trim();
var pat_abs = $("P").first().text().trim();
var pat_num = elems[0];
var pat_auth = elems[1];
var pat_date = elems[2];
var temp = "Title: " + pat_title + "'nNumber: " + pat_num + "'nAuthor: " + pat_auth + "'nDate: " + pat_date + "'nAbstract: " + pat_abs;
db.patents.save(
{
_id: filename.trim(),
Title: pat_title,
Number: pat_num,
Author: pat_auth,
Date: pat_date,
Abstract: pat_abs
},
function(err, saved)
{
if( err || !saved ) console.log("Patent not saved");
else console.log("Patent saved");
});
fs.writeFile(filename.trim(), temp, function(err) {
if(err) {
console.log(err);
} else {
console.log("The file was saved!");
}
});
});
}
exports.parse = parse;
希望这是我在这里的第一篇文章,有意义,可读性强。
除了程序不会终止(必须使用ctrl+c)之外,一切都按我期望的方式执行。我该如何更改程序,以便在回调中关闭连接,还是我错过了要点,走错了路?
如果发生错误,则会调用db.close(),但在完成连接后不会调用它。
当nodejs具有活动连接或正在等待端口/套接字上的连接时,它将保持运行。
希望这能有所帮助!
相关文章:
- 如何处理node.js节点mongodb中的连接和查询队列
- 不使用Nodejs连接mongodb上的默认端口
- 如何从Meteor内部获取当前连接的MongoDB数据库的URL
- 如何在MongoDB和Meteor中自动销毁1-M连接
- Node.js Mongodb原生驱动程序连接共享
- Expressjs Mongodb 初始连接设置困难
- 使用 MongoDB 连接池的 NodeJS 一次性脚本 - 如何终止
- 尝试连接 AngularJS $http时出现 mongodb 服务器错误
- 如何正确连接 mongodb 和 Node.js
- 关闭节点中的MongoDB连接.js同时插入大量数据
- NodeJS MongoDB 连接字符串问题
- 如何使用node.js通过https实现mongodb连接
- 关闭mongodb连接,并使用多个并行异步查询获得正确的结果
- 将MongoDB连接到前端
- 在回调中终止mongodb连接
- 如何将mongoDB连接到服务器
- MongoDB连接尚未在Node.js中初始化
- 寻找在多个javascript文件中使用一个mongodb连接的最佳实践
- 通过nodejs Express Application持久化mongodb(2.0)连接
- MongoDB -连接本地数据库时出现错误