从nodeJS + Express返回一个空的响应

我很抱歉,如果这不符合官方标准,但请注意我尽了全力。

我有麻烦返回一个JSON响应在我的API从MongoDB实例抓取内容

基本上我有以下文件处理nodejs服务器(server.js):

var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var mongoose = require('mongoose'); var Person = require('./models/people'); mongoose.connect('mongodb://localhost/testdb'); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); var port = process.env.PORT || 8080; var router = express.Router(); router.use(function (req,res,next) { console.log('something going on'); next(); }) router.get('/', function (req,res) { res.status(500).json({ error: 'unauthorized' }); }); router.route('/getPeople').get(function (req,res){ Person.find(function (err,people) { console.log('err: ' , err); console.log('people: ' , people); if (err) res.send(err) res.json(people); }) }) app.use('/api',router); app.listen(port); console.log('server started on port : ' , port); 

模型如下(people.js):

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var PeopleSchema = new Schema({ name: String, surname: String }); module.exports = mongoose.model('Person',PeopleSchema) 

我的数据库正确填写一个值,如果我使用mongo shell(db.People.find())来访问它,我得到正确的结果。 相反,使用代码,它不起作用。

您需要在find()方法中指定条件或search条件对象,它在代码中缺失。 您只包含callback函数。 尝试重写路由方法并更改模型名称以反映数据库名称:

people.js('./models/people'):

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var PeopleSchema = new Schema({ name: String, surname: String }); module.exports = mongoose.model('People', PeopleSchema); 

或者如果您希望将模型名称保留为Person,则可以将collectionName作为model()函数参数中的第三个parameter passing:

 module.exports = mongoose.model('Person', PeopleSchema, 'People'); 

或者作为模式定义中的一个属性:

 var PeopleSchema = new Schema({ name: String, surname: String }, { collection: 'People' }); module.exports = mongoose.model('Person', PeopleSchema); 

服务器(server.js):

 /* if using the renamed People model */ router.route('/getPeople').get(function (req,res){ People.find({}, function (err, people) { console.log('err: ' , err); console.log('people: ' , people); if (err) res.send(err) res.json(people); }); }); 

或通过执行查询:

 /* if using the renamed People model */ router.route('/getPeople').get(function (req,res){ People.find().exec(function (err, people) { console.log('err: ' , err); console.log('people: ' , people); if (err) res.send(err) res.json(people); }); }); 

你可以试试吗?

  Person.find() .exec(function (err, people) { console.log('err: ' , err); console.log('people: ' , people); if (err) res.send(err) res.json(people); }) 

如果不是这样的话,那就不是你路上的错误。 / /编辑是在你的发现是缺less条件你已经通过callback的条件。

 Person.find({},function (err,people) {