【问题标题】:`express` app - not able to test the `post` request using `postman``express` 应用程序 - 无法使用`postman` 测试`post` 请求
【发布时间】:2016-11-02 04:12:00
【问题描述】:

我创建了一个小的express 应用程序。我只是想测试post 方法。但它根本不起作用。据我说一切都很好。但我无法弄清楚这个问题。有人帮帮我吗?

我的 server.js 文件:

var express = require('express');
var bodyParser = require('body-parser');
var Post = require('./models/post');

var app = express();
app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(bodyParser.json());

app.get('/api/posts', function( req, res) {
    res.json([
        {
            username:"dickeyxxx",
            body : "node rocksxx"
        }
    ])
});


app.post('/api/posts', function( req, res, next) {

    var post = new Post({
        username:req.body.username,
        body:req.body.body
    })

    post.save(function(err, post){
        if(err) { return next }
            res.json(201,post);
    })

})



app.listen(5000, function(){
    console.log('Server Listening on', 5000);
})

我的 post.js:

var db = require('../db');
var Post = db.model('Post', {
    username:{type:String, required:true},
    body:{type:String,required:true},
    date:{type:Date, required:true,default:Date.now}
});

module.exports = Post;

我的 db.js:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/social', function(){
    console.log( 'mongoose connected' ); //i am getting consoled
});

module.exports = mongoose;

我对邮递员的尝试:

有人帮我吗?

【问题讨论】:

  • 文档是否保存在mongoDb中?
  • 您是否尝试添加一些 console.log 以查看它是否已到达您的 app.post 路由处理程序?
  • @Subburaj - 我猜这没有保存。 (我尝试使用 mongo shell 查看)但我看不到任何结果
  • 您的应用在发送请求后立即运行??
  • 您的res.json(201,post); 错误。如果您想发送状态 201,请使用 res.status(201).json(post); 参见 expressjs.com/en/api.html#res.json

标签: node.js express postman


【解决方案1】:

这样的错误通常是 Postman 无法真正到达客户端的情况。它不是 express 返回的典型错误。

当你启动你的快递应用时,你真的看到了吗

Server Listening on 5000

如果可以,GET 端点是否有效?

如果上述情况属实,那么出现此类错误的典型方法是您的 express 应用实际上因未捕获的异常而退出。发送邮递员请求时,您是否在控制台中看到任何错误?

在这些检查之后,将console.log('POST endpoint called') 添加到 POST 端点并检查它是否实际被调用。

您的 POST 端点也有问题。

post.save(function(err, post){
    if(err) { return next(err) } // You need to actually return the called next function, not the function itself. 
    return res.json(201,post); // It is commonplace to return the res here to avoid hitting any further code that you might add later.
})

虽然它不在您的代码示例中(可能为简洁起见),但请确保您有一些最后一个端点可以接收任何错误或 404,以便您始终返回响应。

app.all('*', function (req, res, next) {
    return res.status(404).json({success: false, message: 'Route \'' + req.url + '\' is invalid.'});
});
app.use(function(err, req, res, next) {
    return res.status(500).json(err);
}); 

【讨论】:

  • 有时我会删除我的data\db 中的所有文件 - 它似乎有效。这是否意味着,每个请求我都需要清除该文件夹或这里有什么问题?
  • 在这种情况下,问题可能是您从 mongo 收到错误,因为您的项目已经存在或类似的东西,并且它返回错误。因为您实际上并没有调用 next,所以 express 永远不会返回结果并挂起,这就是邮递员实际上从未获取任何数据的原因。添加next(err) 和上面的错误端点,它应该会给你错误。
  • 根据摩尔达的回答,如果您希望返回正确的状态代码,您还需要更新您的 json 调用,但从您所说的看来,您似乎得到了一个在这些场合做出回应。
  • 很高兴收到您的所有建议和想法。你使我走上了正确的道路。非常感谢你。
【解决方案2】:

您的res.json(201,post); 错误。

如果你想发送状态 201 然后使用

res.status(201).json(post);

http://expressjs.com/en/api.html#res.json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    相关资源
    最近更新 更多