Express(或Connect)的bodyParser中间件被标记为已弃用,建议用户使用:
app.use(connect.urlencoded())
app.use(connect.json())
Run Code Online (Sandbox Code Playgroud)
但是,当我在Action中运行Node.js中的一个示例时,我使用curl按照本书的建议填写表单:
curl -F entry[title]='Ho ho ho' -F entry[body]='santa loves you' http://abc:123@127.0.0.1:3000/api/entry
Run Code Online (Sandbox Code Playgroud)
它不起作用.req.body没有定义.我错过了什么吗?它与bodyParser一起工作正常.
编辑:快递4的解决方案
以这种方式解析json:
var bodyParser = require('body-parser');
...
app.use(bodyParser.json());
Run Code Online (Sandbox Code Playgroud)
以这种方式解析urlencoded的身体:
app.use(bodyParser.urlencoded({extended: true}));
Run Code Online (Sandbox Code Playgroud)
然后没有弃用警告.extended:true(默认值)使用qs模块,false使用querystring模块解析主体.
不要使用app.use(bodyParser()),现在不推荐使用该用法.
Pau*_*gel 28
bodyParser实际上三个中间件(见组合物文档和相关的源代码): json,urlencoded和multipart:
json解析application/json请求主体urlencoded解析x-ww-form-urlencoded请求主体multipart解析multipart/form-data请求体,这是你感兴趣的.如果您只指定json和urlencoded中间件,则表单数据不会被任何中间件解析,因此req.body不会被定义.然后,您需要添加一个能够解析表单数据的中间件,例如强大的,busboy或multiparty(如connect文档中所述).
这是一个例子,使用multiparty:
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.use('/url/that/accepts/form-data', multipartMiddleware);
app.post('/url/that/accepts/form-data', function(req, resp) {
console.log(req.body, req.files);
});
Run Code Online (Sandbox Code Playgroud)
不要忘记,通过使用这样的中间件,您允许任何人将文件上传到您的服务器:然后您有责任处理(和删除)这些文件.
| 归档时间: |
|
| 查看次数: |
25691 次 |
| 最近记录: |