Mongodb不通过express.js

时间:2017-04-16 13:00:59

标签: mongodb express mongoose

操作系统是Os X.我通过brew安装了mongodb。

我打开一个终端并输入

mongod

然后在终端中打印几行。数据库似乎绝对正常运行。我看到例如:

db version v3.4.3
waiting for connections on port 27017

然后我打开另一个终端并输入

mongo

我看到了:

MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3           
然后我输入这个终端

show dbs

我明白了:

admin  0.000GB
api    0.000GB
local  0.000GB  

所以我输入

use api
db.movie.find();

终端打印:

{ "_id" : ObjectId("58f34b96d7eac221145a5d4e"), "name" : "tutorials point" }
{ "_id" : ObjectId("58f367e198554c65c4a34c9f"), "name" : "lalaland" }       

我输入:

db.movie.insert({ name: "forreste gump"});

然后find()命令返回:

{ "_id" : ObjectId("58f34b96d7eac221145a5d4e"), "name" : "tutorials point" }
{ "_id" : ObjectId("58f367e198554c65c4a34c9f"), "name" : "lalaland" }
{ "_id" : ObjectId("58f369259a667b015582e4b8"), "name" : "forreste gump" }

现在,我使用express.js创建一个新的节点应用程序。这是代码:

var express    = require('express');
var app        = express();
var mongoose = require('mongoose');
mongoose.Promise = global.Promise;
var connection = mongoose.createConnection('mongodb://localhost/api');

connection.on('open', function() {
    console.log('opened');
});

var movieSchema = mongoose.Schema({
    name: String
});

var Movie = mongoose.model('Movie', movieSchema);
var pulp = new Movie({ name: 'pulp fiction' });
pulp.save(function (err, fluffy) {
    if (err){
        console.error("Error:");
        console.error(err);
    }
    console.error('inside save');
});
console.log('pulp.name');
console.log(pulp.name);

在package.json中我输入了

"mongoose": "~4.9.4",

然后运行npm install(我可以看到已安装该版本)

所以,当我用

启动应用程序时
node app.js

在终端我看到了

pulp.name
pulp fiction
opened      

这意味着该行" pulp.save"永远不会被贬低。或者,可能是由于某些不显示的错误而停止。 我对此感到疯狂。我真的不知道问题是什么。 mongod启动并运行,我连接到mongoose中的正确数据库。但仍然无法保存文档,最重要的是,我没有看到任何错误的痕迹。显然必须出现在哪里。 如何深入调试mongoose操作?

PS:当我去运行mongo客户端的终端时,我输入:

db.movie.find()

我只看到

{ "_id" : ObjectId("58f34b96d7eac221145a5d4e"), "name" : "tutorials point" }
{ "_id" : ObjectId("58f367e198554c65c4a34c9f"), "name" : "lalaland" }
{ "_id" : ObjectId("58f369259a667b015582e4b8"), "name" : "forreste gump" }

所以"纸浆小说"从未添加过。

1 个答案:

答案 0 :(得分:1)

差异为mongoose.connect() vs mongoose.createConnection()(另见this question

基本上如下工作: 使用mongoose.createConnection()时,您必须这样做:

var db = mongoose.createConnection(...)
// And use the db variable
var Model = db.model(...); // etc...

而不是使用mongoose.model(...)

这是因为使用mongoose.createConnection()您没有在mongoose对象上创建连接,只在db对象的范围内。