Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么使用主体解析器未定义req.body?_Javascript_Jquery_Node.js_Mongodb_Express - Fatal编程技术网

Javascript 为什么使用主体解析器未定义req.body?

Javascript 为什么使用主体解析器未定义req.body?,javascript,jquery,node.js,mongodb,express,Javascript,Jquery,Node.js,Mongodb,Express,我正在发出post请求,但是我得到了req.body是未定义的。 这是我的sever.js文件 import express from 'express'; import bodyParser from 'body-parser' import mongoose from 'mongoose' var db = mongoose.connect('mongodb://localhost:27017/hockey'); var playerModel = require('./model/pla

我正在发出
post
请求,但是我得到了
req.body
未定义的
。 这是我的sever.js文件

import express from 'express';
import bodyParser from 'body-parser'
import mongoose from 'mongoose'

var db = mongoose.connect('mongodb://localhost:27017/hockey');
var playerModel = require('./model/players')

var app = express();
var port = process.env.port || 3000;
var appRouter = express.Router();
app.use('/api', appRouter);
app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json());
appRouter.route('/player')
    .post((req, res) => {
    // undefined why ?
    console.log(req.body);
        var player = new playerModel(req.body);
       // player.save();
        res.status(201).send(player);
    })
    .get((req, res) => {
        playerModel.find((err, player) => {
            if (err) {
                console.log(err);
            }
            else {
                res.json(player);

            }
        })
        // res.json({"name": "nave"})
    })


app.get('/', (req, res) => {
    res.send("helo")
})

app.listen(port, () => {
    console.log('listening to port', port)
});
package.json

{
  "name": "Mongos",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "babel server.js -o index.js && node index"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.6.1",
    "body-parser": "^1.18.2",
    "express": "^4.16.2",
    "mongoose": "^5.0.9"
  }
}
当我使用
postman
并发送post请求时,它会显示
undefined

Model.js

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

var playerModel = new Schema({
    name: {type: String},
    lastname: {type: String}
})

module.exports = mongoose.model('players', playerModel);

请注意中间件的顺序:

app.use('/api', appRouter);
app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json());
中间件加载的顺序很重要:首先加载的中间件功能也会首先执行

移动
app.use('/api',approter),如下所示:

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

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

请注意中间件的顺序:

app.use('/api', appRouter);
app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json());
中间件加载的顺序很重要:首先加载的中间件功能也会首先执行

移动
app.use('/api',approter),如下所示:

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

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

为了进一步补充Aleksey的回答,您告诉
app
通过主体解析器中间件将所有请求传递给
app
,而不是
appRouter
,后者正处理/api/player post请求

Aleksey的答案很好,另一种方法是让
审批者使用
主体解析器

app.use('/api', appRouter);
appRouter.use(bodyParser.urlencoded({ extended: true }));    
appRouter.use(bodyParser.json());

阅读更多关于使用的内容,进一步添加到Aleksey的答案中,您告诉
app
通过主体解析器中间件将所有请求传递给
app
,而不是
appRouter
,后者正处理/api/player post请求

Aleksey的答案很好,另一种方法是让
审批者使用
主体解析器

app.use('/api', appRouter);
appRouter.use(bodyParser.urlencoded({ extended: true }));    
appRouter.use(bodyParser.json());
阅读更多关于使用