从nodeJS + Express

时间:2016-01-29 09:11:40

标签: javascript node.js mongodb

如果不遵循社区标准,我道歉,但请注意我尽力了。

我在我的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())访问它,我会得到正确的结果。相反,使用代码,它不起作用。

2 个答案:

答案 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) {