Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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 为什么我需要中间件来解析HTTP主体?_Javascript_Node.js_Rest_Express_Http - Fatal编程技术网

Javascript 为什么我需要中间件来解析HTTP主体?

Javascript 为什么我需要中间件来解析HTTP主体?,javascript,node.js,rest,express,http,Javascript,Node.js,Rest,Express,Http,我试图理解RESTful API是如何工作的。我正在尝试使用ExpressJS路由POST请求。我的问题是req.body.name总是返回undefined。换句话说,我无法访问HTTP请求主体中的数据 这是我用邮递员发送的请求 下面是响应中发送的错误消息 我已经阅读了几篇文章,我知道必须使用一些附加软件(也称中间件)来使请求体可读以表达(即解析请求)。但是我真的不明白为什么会这样。为什么我不能直接访问request.body.name 这是我的密码 const express = requ

我试图理解RESTful API是如何工作的。我正在尝试使用ExpressJS路由POST请求。我的问题是
req.body.name
总是返回undefined。换句话说,我无法访问HTTP请求主体中的数据

这是我用邮递员发送的请求

下面是响应中发送的错误消息

我已经阅读了几篇文章,我知道必须使用一些附加软件(也称中间件)来使请求体可读以表达(即解析请求)。但是我真的不明白为什么会这样。为什么我不能直接访问
request.body.name

这是我的密码

const express = require('express');
const app = express();

app.get('/', (req,res)=>{
    console.log('Im in the index');
    res.send('Index page');
});

app.get('/parameterRoute/:id', (req,res)=>{
    console.log('Im in parameterRoute');
    res.send(req.params.id);
});

// This is the problem
app.post('/postRoute',(req,res) =>{

    res.send(req.body.name);
});

这回答了你的问题吗?它确实澄清了一些事情,尽管我仍然不明白为什么不首先解析身体。让主体直接可访问不是比麻烦地添加中间件更好吗?这是另一个故事,已经在阅读本文时讨论过。请求主体不必是JSON。它可以是文本、表单和其他类型。您需要主体解析器来告诉express主体是什么类型。主体解析器读取内容类型头并检查它是否与您的配置匹配。然后它将主体解析为req.body对象。这是否回答了您的问题?它确实澄清了一些事情,尽管我仍然不明白为什么不首先解析身体。让主体直接可访问不是比麻烦地添加中间件更好吗?这是另一个故事,已经在阅读本文时讨论过。请求主体不必是JSON。它可以是文本、表单和其他类型。您需要主体解析器来告诉express主体是什么类型。主体解析器读取内容类型头并检查它是否与您的配置匹配。然后将主体解析为req.body对象。