Express(或Connect的)bodyParser中间件已标记为已弃用,建议用户改为使用:
app.use(connect.urlencoded()) app.use(connect.json())
但是,当我从 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
没用 req.body没有定义。我想念什么吗?它与bodyParser一起正常工作。
req.body
编辑:自Express 4起的解决方案
以这种方式解析json:
var bodyParser = require('body-parser'); ... app.use(bodyParser.json());
通过以下方式解析urlencoded主体:
app.use(bodyParser.urlencoded({extended: true}));
则没有弃用警告。扩展名:true(默认)使用qs模块,false使用querystring模块来解析正文。
请勿使用app.use(bodyParser()),该用法现已弃用。
app.use(bodyParser())
bodyParser实际上三个中间件(见组合物文档和相关的源代码): json,urlencoded和multipart:
bodyParser
json
urlencoded
multipart
application/json
x-ww-form-urlencoded
multipart/form-data
如果仅指定json和urlencoded中间件,则任何中间件都不会解析表单数据,因此req.body不会定义。然后,您需要添加一个中间件,该中间件能够解析表单数据,例如强大,busboy或多方(如connect的文档所述)。
connect
这是一个使用的示例multiparty:
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); });
不要忘了通过使用这样的中间件,任何人都可以将文件上传到您的服务器:这是您处理(和删除)这些文件的责任。