我正在开发一款新应用,并尝试在本地设置mongo进行存储。我的api端点受到了攻击,但是一旦我尝试实际调用db操作 - 查找或保存 - 它就没有响应。
<br/>
这是架构:
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var Person = require('./data/person');
var dbConfig = require('./config');
//database: 'mongodb://localhost:27017/persondb'
var db = mongoose.createConnection(dbConfig.database);
db.on('error', function() {
console.info('Error: Could not connect to MongoDB. Did you forget to run `mongod`?');
});
if (~process.argv.indexOf('mode_dev')) {
global.mode_dev = true;
console.log('Server started in dev mode.');
}
// configure app to use bodyParser()
// this will let us get the data from a POST
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use('/api', router);
router.route('/persons')
.post(function(req, res) {
debugger;
var person = new Person(); // create a new instance of the Person model
person.name = req.body.name;
person.save(function(err) {
debugger;
if (err)
res.send(err);
res.json({ message: 'Person created!' });
});
})
.get(function(req, res) {
Person.find(function(err, persons) {
debugger;
if (err)
res.send(err);
res.json(persons);
});
});
我在启动网络服务器之前运行mongod。一旦我到达.save或.find调用,就不会抛出任何错误,但回调函数永远不会被触发。
答案 0 :(得分:1)
我会这样连接:
mongoose.connect("mongodb://localhost/persondb");
var db = mongoose.connection;
也许this会帮助它解释使用mongoose.createConnection(
如果使用createConnection,如果包含已注册的模型,则需要始终引用该连接变量,否则如果使用mongoose加载模型,它将永远不会实际与数据库通信。
另一种解决方案是简单地使用mongoose.connect而不是 mongoose.createConnection。然后你可以使用 mongoose.model('MyModel')无需加载所请求的模型 携带该数据库连接变量。