Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点脚本没有';永远不会结束_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 节点脚本没有';永远不会结束

Javascript 节点脚本没有';永远不会结束,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有下面的节点脚本,基本上是复制一些文件的内容并将它们插入mongo 脚本似乎永远不会结束,即使所有数据都成功插入,我也必须执行Ctrl+C来终止它 我应该在node.js中使用什么来结束脚本吗 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/testdb'); var dir = './seeds'; var db = mongoose.connection; // Show connecti

我有下面的节点脚本,基本上是复制一些文件的内容并将它们插入mongo

脚本似乎永远不会结束,即使所有数据都成功插入,我也必须执行Ctrl+C来终止它

我应该在node.js中使用什么来结束脚本吗

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/testdb');
var dir = './seeds';
var db = mongoose.connection;

// Show connection error if there is one
db.on('error', console.error.bind(console, 'Database Connection Error:'));

// If we successfully connected to mongo
db.once('open', function callback() {

    var fs = require('fs'); // Used to get all the files in a directory

    // Read all the files in the folder
    fs.readdir(dir, function(err, list) {

        // Log the error if something went wrong
        if(err) {
            console.log('Error: '+err);
        }

        // For every file in the list
        list.forEach(function(file) {

            // Set the filename without the extension to the variable collection_name
            var collection_name = file.split(".")[0];
            var parsedJSON = require(dir + '/' + file);

            for(var i = 0; i < parsedJSON.length; i++) {

                // Counts the number of records in the collection
                db.collection('cohort').count(function(err, count) {
                    if(err) {
                        console.log(err);
                    }
                });

                db.collection(collection_name).insert(parsedJSON[i], function(err, records) {

                    if(err) {
                        console.log(err);
                    }

                    console.log(records[0]);
                    console.log("Record added as "+records[0]);

                });
            }

        });
    });
});
var mongoose=require('mongoose');
猫鼬mongodb://localhost/testdb');
var dir='/种子';
var db=猫鼬连接;
//如果存在连接错误,则显示连接错误
db.on('error',console.error.bind(console,'Database Connection error:');
//如果我们成功连接到mongo
db.once('open',函数回调(){
var fs=require('fs');//用于获取目录中的所有文件
//读取文件夹中的所有文件
fs.readdir(dir,function(err,list){
//如果出现问题,请记录错误
如果(错误){
log('Error:'+err);
}
//对于列表中的每个文件
list.forEach(函数(文件){
//将不带扩展名的文件名设置为变量集合\u name
var collection_name=file.split(“.”[0];
var parsedJSON=require(dir+'/'+文件);
for(var i=0;i
完成所有操作后,调用
mongoose.disconnect()
。正如@AaronDufour正确指出的,当注册事件处理程序回调时,节点将不会退出,因为它不知道预期不会有更多的事件,例如,连接发出“关闭”或“错误”事件。

您可以调用
process.exit()
要退出

您可能需要关闭
db
连接。就
node.js
所知,只要它是打开的,它仍然是事件的可能来源。答案是正确的,注释是正确的。您基本上需要了解您是在一个“事件循环”下运行的,其结果是,当您“像您一样”打开事件处理程序时(即使您不知道您已经打开了),那么循环将等待事件。关闭处理程序或显式“结束循环”,但确保所有同步请求都已完全处理。