我试图创建一个webhook,通过POST方法将XML数据发送到我的Node.js应用程序。我只是试图获取它正在发送的数据,问题是无论我做什么,它都会保留在application / json内容类型中。这导致数据无法显示。当我发出POST请求时,我可以强制标题(并且它工作正常),但我无法控制生产。不知道还有什么可以尝试。
以下是我目前的代码。
server.js
'use strict';
const express = require('express'), app = express();
const xmlparser = require('express-xml-bodyparser');
app.use(xmlparser());
app.use(function (req, res, next) {
res.header('Content-Type', 'application/xml');
res.header('Accept', 'application/xml');
res.set('Content-Type', 'application/xml');
res.set('Accept','application/xml');
next();
});
app.post('/webhook',function(request, response) {
response.header('Content-Type', 'application/xml');
response.header('Accept','application/xml');
response.set('Content-Type', 'application/xml');
response.set('Accept','application/xml');
console.log('running webhook');
console.log(request.headers);
response.end();
});
package.json
"dependencies": {
"express": "^4.8.0",
"express-xml-bodyparser": "^0.3.0",
"nodemon": "^1.11.0"
}
在request.headers
对象中我得到(注意内容类型):
{ host: '{MYURLHERE}',
'content-length': '4429',
accept: 'application/json',
origin: 'chrome-extension://ecjfcmddigpdlehfhdnnnhfgihkmejin',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36',
'content-type': 'application/json',
dnt: '1',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.8',
cookie: '',
'x-forwarded-proto': 'https',
'x-forwarded-port': '443',
'x-region': 'usw',
'x-forwarded-for': 'XX.XX.X.XXX',
connection: 'keep-alive' }
答案 0 :(得分:1)
您正在记录的标题来自您的Chrome扩展程序,因为没有设置覆盖,它将使用默认值,这就是您记录永不更改的原因。它们来自您的浏览器。
在您的情况下,您需要在Chrome扩展程序上设置标题,或者如果Web挂钩需要它们,您需要启动新请求并在其中设置标题。
以下是如何使用setHeaders
的示例。
在Post
上,它应该是
response.setHeader('Content-Type', 'application/xml');
response.setHeader('Accept','application/xml');