使用MEAN堆栈在POST请求上超时

时间:2015-10-08 19:22:10

标签: javascript node.js mongodb express

我正在学习使用Node和Express 4.0创建一个RESTful API,并且在使用Chrome中的Postman进行测试时,只能让POST req正常工作。调用save方法时请求超时(我想 - 我是新手)。

这是我的基本代码:

server.js:

var express = require('express');   
var app = express();
var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var port = process.env.PORT || 8080;

var mongoose = require('mongoose');
mongoose.connect('mongodb://node:node@ds033484.mongolab.com:33484/testdatabase');

var Dog = require('./app/models/dog');

var router = express.Router(); 

router.route('/dogs')
    .post(function(req, res) {
        var dog = new Dog();
        dog.name = req.body.name; 
        dog.save(function(err) {
            if (err)
                return res.send (err);
            res.json({ message: 'Dog created!' });
        });

    });

app.use('/api', router);

app.listen(port);
console.log('Code is testable on port ' + port);

应用程序/模型/ dog.js:

var mongoose     = require('mongoose');
var Schema       = mongoose.Schema;

var DogSchema   = new Schema({
    name: String
});

module.exports = mongoose.model('Dog', DogSchema);

我使用Postman测试代码,从下拉菜单中选择POST,然后从Body选项卡中选择x-www-form-urlencoded。我填写了密钥(名称)和值“Clifford。”

请求超时。

所以我在server.js中添加了一些控制台日志:

router.use(function(req, res, next) {
    console.log('Router is in use.');
    next();
});

router.route('/dogs')
    .post(function(req, res) {
        console.log("Accessing Mongoose.");
        var dog = new Dog();
        console.log("New dog.");
        dog.name = req.body.name; 
        console.log("The dog is named: " + dog.name);
        dog.save(function(err) {
            if (err)
                return res.send (err);
            res.json({ message: 'Dog created!' });
        });

    });

所有这些都出现了,包括“狗被命名为:克利福德”。据我所知,这意味着存储方法存在问题。

接下来我应该做什么?任何帮助将非常感激。我在这里发现了类似的问题:no req.body sent on POST requests

但是这里的OP似乎只是在他的测试中使用了错误的设置并且出错了。我得到的唯一错误是超时。

1 个答案:

答案 0 :(得分:0)

如果替换

,它将起作用
router.route('/dogs').post(function(req, res) {});

通过

app.post('/dogs', function(req, res) {});

顺便说一句,如果您正在寻找一种比console.log()更有效的调试节点服务器的方法,我建议node-inspector