[英]NodeJS/Express: Reading header, which was set previously, results undefined
[英]NodeJS with express: Header undefined
我正在使用 Microsoft Flow 向我的服務器發送 HTTP POST 請求。 請求正文包含一個名為“Email-To”的自定義標頭,它的值是一個字符串。 這是身體:
{
"$content-type": "multipart/form-data",
"$multipart": [
{
"headers": {
"Email-To": "test@email.no",
"Content-Disposition": "form-data; name=\"file\"; filename=901210.xlsx"
},
"body": {
"$content-type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"$content": "content"
}
}
]
}
當請求到達我的 NodeJS 服務器時,我想從標頭中檢索值。
app.post('/upload', function(req, res) {
console.log(req.headers("Email-To"))
console.log(req.get("Email-To"))
});
兩個日志都將始終打印“未定義”。 我嘗試通過查看請求對象本身,在標題下進一步調試它。 它似乎沒有標題。
0|server | headers:
0|server | { host: 'my_ip',
0|server | 'accept-language': 'en-US',
0|server | 'user-agent':
0|server | 'azure-logic-apps/1.0 (workflow aa9d5e05e9b54c478ccebf2412633add; version 08586366094673048593) microsoft-flow/1.0',
0|server | 'x-ms-execution-location': 'westeurope',
0|server | 'x-ms-workflow-id': 'aa9d5e05e9b54c478ccebf2412633add',
0|server | 'x-ms-workflow-version': '08586366094673048593',
0|server | 'x-ms-workflow-name': '010bf24d-5a56-4053-8a39-e088e727cbf5',
0|server | 'x-ms-workflow-system-id':
0|server | '/locations/westeurope/scaleunits/prod-48/workflows/aa9d5e05e9b54c478ccebf2412633add',
0|server | 'x-ms-workflow-run-id': '08586365350241297663352938044CU52',
0|server | 'x-ms-workflow-run-tracking-id': '2eec16eb-2f3f-4a87-a26d-683750ca20f5',
0|server | 'x-ms-workflow-operation-name': 'HTTP',
0|server | 'x-ms-workflow-subscription-id': 'b745f25e-91b5-4140-9d73-93b10b1dfb1d',
0|server | 'x-ms-workflow-resourcegroup-name':
0|server | 'B5EBEC49F06342E5B0E1F4E04C03D0B7-D8266BA594DC4A5DB55D7F31650FCD73',
0|server | 'x-ms-tracking-id': 'aa92c109-151a-418c-8d01-754da7bc2c43',
0|server | 'x-ms-correlation-id': 'aa92c109-151a-418c-8d01-754da7bc2c43',
0|server | 'x-ms-client-request-id': 'aa92c109-151a-418c-8d01-754da7bc2c43',
0|server | 'x-ms-client-tracking-id': '08586365350241297663352938044CU52',
0|server | 'x-ms-action-tracking-id': 'f3a02477-227d-46cf-9105-228fe5c41f8d',
0|server | 'x-ms-activity-vector': 'IN.0E',
0|server | 'content-type':
0|server | 'multipart/form-data; boundary="c859bba4-c9e1-4426-86ce-b3daf6ab74d9"',
0|server | 'accept-encoding': 'gzip, deflate',
0|server | via: '1.1 my_ip (Apache/2.4.18)',
0|server | 'x-forwarded-for': 'someones_ip',
0|server | 'x-forwarded-host': 'my_ip',
0|server | 'x-forwarded-server': 'my_ip',
0|server | connection: 'Keep-Alive',
0|server | 'content-length': '43929' }
閱讀標題后,我很確定任何不與其他標題沖突的鍵值對都應該可以正常工作,但我的“電子郵件至”標題似乎不起作用。 任何想法為什么?
編輯:CORS(使用通配符)
Sending POST request to http://my_ip/node/upload
Fired XHR event: loadstart
Fired XHR event: readystatechange
Fired XHR event: error
XHR status: 0
XHR status text:
Fired XHR event: loadend
編輯 2:我嘗試使用郵遞員發送 POST 請求,它工作得很好。 我可以像往常一樣檢索標題。
編輯 3:我像這樣添加 CORS:
app.post('/upload', function(req, res) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Email-To");
console.log(req.headers("Email-To"))
console.log(req.get("Email-To"))
});
嘗試使用方括號,它應該可以工作。
app.post('/upload', function(req, res) {
console.log(req.headers["Email-To"]))
});
在下面添加幾行,然后再試一次。
app.options('/upload', function(req, res) {
res.setHeader('Access-Control-Allow-Origin','specify your origin');//do not use `*`!
res.setHeader('Access-Control-Allow-Headers','Email-To');
res.setHeader('Access-Control-Allow-Methods','POST');
res.end();
});
嘗試使用箭頭函數和方括號
app.post('/upload', (req, res) => {
console.log(req.headers["Email-To"]))
});
從 req.headers 獲取值時請使用小寫的參數名稱
app.post('/upload', function(req, res) {
console.log(req.headers["email-to"])) //email-to
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.