Javascript 使用平均堆栈的POST Req超时

Javascript 使用平均堆栈的POST Req超时,javascript,node.js,mongodb,express,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.urlencode

我正在学习使用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);
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!' });
        });

    });
app/models/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-urlcoded。我填写了键名和Clifford的值

请求超时

因此,我在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);
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!' });
        });

    });
他们都出现了,包括那只名叫克利福德的狗。据我所知,这意味着save方法存在问题

接下来我该做什么?任何帮助都将不胜感激。我在这里发现了一个类似的问题:


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

如果您替换它,它将工作

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


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

如果将console.log放在save函数中会发生什么?它叫得对吗?也就是说,你能连接到mongo吗?我刚刚添加了以下日志,但它没有显示在控制台中。dog.savefunctionerr{console.logI正在尝试保存。;if err返回res.send err;res.json{message:'dog created!';};超时错误表示它没有连接,但似乎检查登录时没有问题。我在MongoDB地址中键入错误的密码进行检查,并得到相应的错误。如果您向server.js添加一些代码以创建狗并保存它,会发生什么情况?没有人连接,只是内联测试。我不知道你要求我内联保存它是什么意思。你能给我举个例子吗?将其替换为:app.post'/dogs',functionreq,res{console.logAccessing Mongoose;;var dog=new dog;console.logNew dog;;dog.name=req.body.name;console.log狗名:+dog.name;dog.savefunctionerr{console.logI正在尝试保存。;if err返回res.send err;res.json{message:'Dog created!'};};};我无法在Postman中发布/api/dogs。我刚刚克隆了node inspector,并期待尝试它。如果这是一个需要解决的陌生问题,这可能是一个很好的机会。我相信我们有相同的代码,它对我有效。有时会发生愚蠢的错误,你确定你的节点服务器和mongo服务器已启动吗?当r现在是以后的时候了,我相信node inspector会帮助你,它真的是一个很好的工具。我在重新考虑你的问题,并认为看到我自己的MEAN project的server.js可能会对你有所帮助。是的。我希望它会有所帮助。