我不明白为什么我们需要body-parser在Express应用程序中,因为我们可以在不使用的情况下获取数据body-parser.它实际上做了什么以及如何做?
我在我的应用程序中使用express和body-parser.
app.use(bodyParser.urlencoded({ extended: false }));
Run Code Online (Sandbox Code Playgroud)
但是,快递4.0中"延伸"的含义是什么?
我找到了这个
extended - parse extended syntax with the qs module.
Run Code Online (Sandbox Code Playgroud)
但是,我仍然无法理解其含义.

如图所示,BodyParser 现在已被弃用,如何更正 bodyParser 语法或语句以删除换行符?
对于:
bodyParser.urlencoded({extended: ...})
Run Code Online (Sandbox Code Playgroud)
我的研究告诉我,如果extended: true,那么你可以解析嵌套对象,或者通常是任何类型.但是,如果设置extended: false,则只能解析字符串或数组.但那是什么......
app.use(bodyParser.json())
Run Code Online (Sandbox Code Playgroud)
是什么意思?我的意思是,是的......我知道文件提到它解析了json.但我仍然感到困惑.我注意到设置的应用程序extended: true根本不使用bodyParser.json().但是extended: false倾向于使用的应用程序bodyParser.json().为什么是这样?在一天结束时,两个应用程序都能够解析json.
其次,这是推荐的方法吗?
我似乎无法恢复发送到我的Node.js服务器的post请求的表单数据.我把服务器代码和帖子请求放在下面(使用chrome中的postman发送):
发布请求
POST /api/login HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="userName"
jem
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Run Code Online (Sandbox Code Playgroud)
NodeJS服务器代码
var express = require('express'); // call express
var app = express(); // define our app using express
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser());
app.all('/*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type,accept,access_token,X-Requested-With');
next();
});
var port = process.env.PORT || 8080; // set our port
var router = express.Router(); // get an instance of the express Router
router.get('/', function(req, res) { …Run Code Online (Sandbox Code Playgroud) 我看到LoopBack内置了Express 3.x中间件.确实,身体解析器在loopback/node_modules.但我无法弄清楚如何将其用作中间件.我从未使用Express 3.x,所以也许就是这样.require显然,除非我在我的项目中安装body-parser作为依赖项,否则它不起作用.
我该怎么做server.js才能使用body-parser来解析web表单req.params?这就是它的作用,对吧?
我正在努力解决这个奇怪的问题,我似乎无法解决.我正在使用isomorphic fetch将数据发布到服务器.我将身体作为JSON字符串发送.但是在服务器上,我无法读取正文,它只是一个空对象.
堆栈是:节点,反应.
这是客户端代码:
handleSubmit = (event) => {
const { dispatch } = this.props;
fetch('/api/me', {
method: 'POST',
header: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'xxx'
})
})
.then(response => response.json())
.then( json => dispatch( login( json ) ))
.catch( err => console.log(err) )
}
Run Code Online (Sandbox Code Playgroud)
服务器代码:
var jsonParser = bodyParser.json()
app.post( '/api/me', jsonParser, ( req, res ) => {
console.log('req', req.body);
})
Run Code Online (Sandbox Code Playgroud)
我试过谷歌搜索问题.但我发现的少数解决方案并没有达到目的.
非常感谢所有帮助.
BR
马丁
//更新//
想通了,这是一个愚蠢的',我忘记了.'header'应为'header'
目标:在函数中从HTML发送一些定义的字符串数据,fetch()例如“我的数据”
我的代码:
HTML
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
function fetcher() {
fetch('/compute',
{
method: "POST",
body: "MY DATA",
headers: {
"Content-Type": "application/json"
}
}
)
.then(function(response) {
return response.json();
})
.then(function(myJson) {
console.log(myJson);
});
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
服务器.js
var express = require("express");
var app = express();
var compute = require("./compute");
var bodyParser = require("body-parser");
//not sure what "extended: false" is for
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/compute', (req, res, next) => {
console.log(req.body);
var …Run Code Online (Sandbox Code Playgroud) 在当前版本的body-parser中,现在需要extended使用选项bodyParser.urlencoded().在自述文件中,它解释了:
扩展选项允许选择使用查询字符串库(假设时)或qs库(当为真时)解析URL编码数据.
[...]
默认为true,但不推荐使用默认值.请研究qs和querystring之间的区别,并选择合适的设置.
我找不到任何有用或具体的信息.我只找到了一个已弃用的node-querystring.
这个选项应该永远是真的吗?
因为我花了一些(太多)时间来弄清楚这个简单的要求.我在这里记录了multipart/form-data使用Koa 实现体解析的方法.
就我而言,混淆的原因是那里有可供选择的替代品:
我想找到最简约/最接近的express/koa/node做法/做事哲学.
所以这就是.下面.在接受的答案.希望这可以帮助.
body-parser ×10
express ×8
node.js ×6
javascript ×2
post ×2
fetch ×1
json ×1
koa ×1
loopbackjs ×1
middleware ×1
request ×1