Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Node.js 为什么我的mongodb异步保存失败?_Node.js_Mongodb_Promise - Fatal编程技术网

Node.js 为什么我的mongodb异步保存失败?

Node.js 为什么我的mongodb异步保存失败?,node.js,mongodb,promise,Node.js,Mongodb,Promise,这是代码;有人指出我哪里出错了吗? 这就是我使用承诺的方式吗?我希望每次执行保存之前,对insert()的调用都会检查是否存在有效的db conn 没有错误,但数据库中没有条目。 此外,控制台日志“connecting”按预期显示一次-第二次插入将重用连接(或者我希望它会再次使用) 我猜mongoClient.connectAsync(url)是一个异步调用。。。当您尝试返回this.dbconn时,异步调用实际上还没有完成。@tymeJV:他返回一个promise如何检查数据库中是否有条目?请

这是代码;有人指出我哪里出错了吗? 这就是我使用承诺的方式吗?我希望每次执行保存之前,对insert()的调用都会检查是否存在有效的db conn

没有错误,但数据库中没有条目。
此外,控制台日志“connecting”按预期显示一次-第二次插入将重用连接(或者我希望它会再次使用)


我猜
mongoClient.connectAsync(url)是一个异步调用。。。当您尝试返回
this.dbconn
时,异步调用实际上还没有完成。@tymeJV:他返回一个promise如何检查数据库中是否有条目?请注意,您应该
返回
insert
then()
回调中的承诺。当然,蓝鸟无论如何都应该报告未处理的拒绝。在调用
save()
后尝试登录。你的日志里有吗?
// mongoApi.js

var assert = require('assert');
var promise = require('bluebird');
var mongoClient = promise.promisifyAll(require('mongodb').MongoClient);
var log = require('./logger.js');

var url = 'mongodb://localhost/yangDB';
var dbconn = false;

var getDb = function () {
    if (!this.dbconn) {
        console.log('connecting...')
        this.dbconn = mongoClient.connectAsync(url);
    }
    return this.dbconn;
};

var insert = function (doc) {
    getDb().then(function (db) {
        db.collection('yangTemplates').save(doc);
    });
};

insert( { "first insert" : new Date() } );
insert({ "second insert" : new Date() } );

// eventually: module.exports.insert = insert;
// main.js: var mapi = require('./mongoApi.js'); mapi.insert({a:true});