[英]Express request body for post is undefined
我的app.js中有以下設置:
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var router = express.Router();
require('./routes/index')(router);
app.use(router);
在我的routes/index.js中,我定義了所有路線:
module.exports = function (router) {
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Home' });
});
router.post('/', function(req, res, next) {
console.log(req.body);
});
}
然后在我的應用程序入口點bin/server.js中:
var app = require('../app');
var debug = require('debug')('NodeJSDemo:server');
var http = require('http');
var port = 3000;
app.set('port', port);
var server = http.createServer(app);
server.listen(port);
當我使用請求正文在http://localhost:3000/上進行 POST 調用時,在控制台日志中未定義控制台日志請求正文。
我的設置有什么問題嗎? 從這篇文章Express.js req.body undefined看來只要我打電話
app.use(bodyParser.json())
在加載路線之前,它應該沒問題,但似乎沒有。
問題出在您在POST請求中發送的資源類型。
您的bodyParser.json()
僅解析json格式。 或者換句話說,如果您只是簡單地發布一個在大多數情況下默認為application/x-www-form-urlencoded
的簡單表單,您將不會獲得 body 對象。
正如文檔中所述:
返回僅解析 json 且僅查看 Content-Type 標頭與類型選項匹配的請求的中間件。
和
type - type 選項用於確定中間件將解析的媒體類型。 默認為應用程序/json。
解決方案是實施和收集其他場景,因此:
應用程序/x-www-form-urlencoded
app.use(bodyParser.urlencoded())
多部分/表單數據
如文檔中所述,Express 不會解析多部分正文:
這不處理多部分主體,因為它們復雜且通常很大。 對於多部分主體,您可能對以下模塊感興趣:
- busboy和connect-busboy
- 多方和連接多方
- 強大
- 多個
您不能包含 bodyParser 依賴項。 並使用 express 內置方法:
express.json()
express.text()
express.urlencoded()
它們是基於 bodyParser 模塊構建的,因此調用bodyParser.json()
。 你會做express.json()
並獲得相同的結果。
資料來源: https ://expressjs.com/en/resources/middleware/body-parser.html#bodyparserurlencodedoptions
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.