使用Express

时间:2016-12-20 18:37:45

标签: javascript node.js xml

我试图创建一个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' }

1 个答案:

答案 0 :(得分:1)

您正在记录的标题来自您的Chrome扩展程序,因为没有设置覆盖,它将使用默认值,这就是您记录永不更改的原因。它们来自您的浏览器。

在您的情况下,您需要在Chrome扩展程序上设置标题,或者如果Web挂钩需要它们,您需要启动新请求并在其中设置标题。

以下是如何使用setHeaders的示例。

Post上,它应该是

  response.setHeader('Content-Type', 'application/xml');
  response.setHeader('Accept','application/xml');