如果不遵循社区标准,我道歉,但请注意我尽力了。
我在我的API中返回JSON响应时遇到麻烦,该响应从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())访问它,我会得到正确的结果。相反,使用代码,它不起作用。
答案 0 :(得分:2)
您需要在 find()
方法中指定条件或搜索条件对象,它在代码中缺失。您只包含回调函数。尝试重写路由方法并更改模型名称以将数据库名称反映为:
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()
函数参数中的第三个参数传递:
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);
});
});
答案 1 :(得分:0)
你能试试吗
Person.find()
.exec(function (err, people) {
console.log('err: ' , err);
console.log('people: ' , people);
if (err)
res.send(err)
res.json(people);
})
如果不是这项工作,那么错误不在您的路线中。 //编辑是的,你的发现中缺少你在条件中通过回调的条件。
Person.find({},function (err,people) {