代码之家  ›  专栏  ›  技术社区  ›  Alex Ironside

与邮递员一起投递时,Req没有正文

  •  1
  • Alex Ironside  · 技术社区  · 6 年前

    我正在学习REST with node。

    我正在尝试使用post向我的db添加元素。

    我的代码:

    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;
    

    使用post I get时 req.body 未定义。

    我的服务器。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;
    

    所以我使用身体解析器。

    以下是我与邮递员一起发布的内容:

    enter image description here

    这种疯狂的原因是什么?

    我猜是服务器的问题。但不知道是什么。

    我正在学习本教程。

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   zooblin    6 年前

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

        2
  •  1
  •   JSilv    6 年前

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