[英]Express.js cannot connect to mongodb
我在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
所以它永远不会进入“连接”内部? 我有一个回调,因为我意识到当我尝试与数据库通信时,代码会挂断。 我没有收到任何错误消息,但似乎我无法从express查询mongodb。 怎么了? 我尝试了几种不同的连接字符串,例如127.0.0.1甚至127.0.0.1:27017,但是没有运气。
您的代码没什么错,您将在外面得到响应,因为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
使用“异步”或将连接初始化部分放在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();
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.