簡體   English   中英

Express.js:POST數據作為req.body對象的KEY而不是req.body的VALUE?

[英]Express.js : POST data as KEY of a req.body object instead of VALUE of req.body?

來自我正在做的客戶:

$.ajax({
        url: '/create',
        type: 'POST',
        data: JSON.stringify({
            theme: "somevalue",
            snippet: {
                name: "somename",
                content: "somevalue"
            }
        }), 
        complete: function (response)
        {

        }
    });

在服務器上( node.js/express.js )我正在做:

var app = express();
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
.......
... 
app.post('/create', function (req, res)
{
   var dataReceived = req.body;
});

我期望dataReceived的值為:

{
   "theme" : "somevalue",
   "snippet" : {
     "name": "somename",
     "content" : "somevalue"
   } 
}

相反, dataReceived的值是:

{ 
 '{"theme":"somevalue","snippet":"name":"somename","content":"somevalue"}}': '' 
}

這真的很奇怪,我找不到我做錯了什么。 有任何想法嗎?

來自BodyParser模塊文檔

bodyParser.urlencoded(選項)

返回僅解析urlencoded主體的中間件。 此解析器僅接受正文的UTF-8編碼,並支持gzip和deflate編碼的自動膨脹。

在中間件(即req.body)之后的請求對象上填充包含已解析數據的新主體對象。 此對象將包含鍵值對,其中值可以是字符串或數組(當擴展為false時)或任何類型(當extended為true時)。

這與我的問題有關嗎?

在您的客戶端刪除Stringify

$.ajax({
        url: '/create',
        type: 'POST',
        data: {
            theme: "somevalue",
            snippet: {
                name: "somename",
                content: "somevalue"
            }
        }, 
        complete: function (response)
        {

        }
    });

或者在服務器端再次解析它

app.post('/create', function (req, res)
{
   var dataReceived = JSON.parse(req.body);
});

只需從客戶端請求標頭中刪除此內容類型

 'Content-Type':'application/x-www-form-urlencoded'

您可以使用VALUE獲取KEY,如下所示:

function getKeyByValue(object, value) {
  return Object.keys(object).find(key => object[key] === value);
}

如果要使用JSON.stringify請在客戶端ajax調用上設置此內容類型:

contentType: "application/json"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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