我在OS x上。我正在运行express.js应用程序。这就是我在app.js中所拥有的:
var express = require('express');
var mongoose = require('mongoose');
var cn = 'mongodb://localhost/test';
mongoose.connect(cn, function(error) {
console.log("inside?");
console.log(res);
});
console.log("outside");
如果我打开一个终端写:
mongo
然后我看到了:
MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3
Server has startup warnings:
2017-04-13T16:25:17.440+0200 I CONTROL [initandlisten]
2017-04-13T16:25:17.440+0200 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-04-13T16:25:17.440+0200 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-04-13T16:25:17.440+0200 I CONTROL [initandlisten]
> show dbs
admin 0.000GB
local 0.000GB
test 0.000GB
当我跑步时
node app.js
我在终端中唯一看到的是:
outside
所以它永远不会进入“连接”?我有一个回调,因为我意识到,当我尝试与数据库通信时代码挂起。我没有得到任何错误消息,但似乎我永远不能从快递查询mongodb。怎么了?我尝试了几种不同的连接字符串,例如127.0.0.1甚至127.0.0.1:27017但没有运气。
答案 0 :(得分:0)
你的代码没有错,你会在外面得到响应,因为node.js没有阻止下一个代码执行,一旦回调返回你将获得输出的值。它为我工作。
var express = require('express');
var mongoose = require('mongoose');
var cn = 'mongodb://localhost/test';
mongoose.connect(cn, function(error) {
console.log("inside?");
console.log(error);
});
console.log("outside");
输出控制台:
outside
inside?
undefined
答案 1 :(得分:0)
使用“异步”或将连接初始化部分放在promise中将确保在建立连接之前阻止执行。
await mongoose.connect(cn, function(error) {
console.log("inside?");
console.log(res);
});
如果您使用的是await,请确保该函数具有async关键字。
使用承诺:
return new Promise((resolve, reject) => {
mongoose.connection.on('open', () => {
debug('Connection successfully made');
resolve();
});
mongoose.connection.on('error', () => {
debug('Error occurred');
reject();
});
});