簡體   English   中英

快遞請求正文未定義

[英]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 不會解析多部分正文:

這不處理多部分主體,因為它們復雜且通常很大。 對於多部分主體,您可能對以下模塊感興趣:

  1. busboyconnect-busboy
  2. 多方連接多方
  3. 強大
  4. 多個

對於 Express 版本:+4.17.0

您不能包含 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM