【问题标题】:Req has no body when posting with Postman使用 Postman 发帖时,Req 没有​​正文
【发布时间】:2018-09-09 21:30:25
【问题描述】:

我正在学习 REST with node。

我正在尝试使用 post 向我的数据库添加一个元素。

我的代码:

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var AdModule = require('../models/ad');

router.route('/')
    .get((req, res) => {
        AdModule.find((err, col) => {
            if (err)
                res.send(err);
            res.json(col);
        })
    })
    .post((req, res) => {
        var ad = new AdModule();
        ad.title = req.body.title;
        ad.desc = req.body.desc;
        ad.price = req.body.price;
        ad.save(err => {
            if (err)
                res.send('err' + err);
            res.json({msg: 'Created'});
        })
        res.json(req);
    });

module.exports = router;

使用帖子时,我得到 req.body 未定义。

我的 server.js 代码:

'use strict';

//======================= Base setup =======================\\

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var config = require('./globals/config');

var index = require('./routes/index');
var users = require('./routes/users');
var ads = require('./routes/ads');

var app = express();


//========================= DB =============================\\

mongoose.connect(config.db, () => {
    console.log('Connected');
});


//========================= Routes =========================\\

app.use('/', index);
app.use('/users', users);
app.use('/ads', ads);

//========================= Parsers ========================\\

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// app.engine('html', require('ejs').renderFile);
// app.set('view engine', 'html');

//========================= 404 ============================\\

// catch 404 and forward to error handler
// app.use(function(req, res, next) {
//     var err = new Error('Not Found');
//     err.status = 404;
//     next(err);
// });
//
// // error handler
// app.use(function(err, req, res, next) {
//     // set locals, only providing error in development
//     res.locals.message = err.message;
//     res.locals.error = req.app.get('env') === 'development' ? err : {};
//
//     // render the error page
//     res.status(err.status || 500);
//     res.render('error');
// });
//

//==========================================================\\

module.exports = app;

所以我正在使用正文解析器。

这就是我与邮递员一起发帖的方式:

这种疯狂的原因是什么?

我猜是 server.js 的问题,但不知道是什么。

我一直在学习本教程。

https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4#creating-routes-for-a-single-item

【问题讨论】:

  • 您的问题由您的教程回答。
  • 我没有意识到在这种情况下顺序很重要。

标签: javascript node.js rest express postman


【解决方案1】:

Express 中间件按定义的顺序执行,在您的情况下,bodyParser 定义在 ads 中间件之后,只需将 asd 移动到底部

【讨论】:

    【解决方案2】:

    把你的解析器放在你的路由之上——就像现在发生的那样,请求在它们有机会通过解析器之前就已经到达了路由。

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 2021-02-11
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多