将XML发布到Swagger Node Express应用程序

时间:2018-01-04 20:28:43

标签: node.js xml express swagger swagger-editor

我是Swagger,node和express的新手,现在在POST请求中遇到了一些关于XML内容的问题。

我用swagger project create创建了一个项目,并选择express作为框架。

我的端点描述(有趣的部分)我已经放入了api/swagger/swagger.yaml

[...]
consumes:
  - application/xml
  - application/json
produces:
  - application/json
[...]
paths:
  /test:
    x-swagger-router-controller: testctrl
    post:
      description: |
        The endpoint that actually consumes the XML data.
      parameters:
        - name: data
          in: body
          description: The actual data
          required: true
          schema:
            $ref: "#/definitions/MyData"
      responses:
        "200":
          description: Success
          schema:
            type: string

在我的api / controller / test.js中,我有以下功能:

module.exports = {
  post: testctrl_post
};

function testctrl_post(req, res) {
  console.log("Received POST request...");
  console.log(req.body);
  // Here I want to do something with XML data.
  res.status(200).json("OK");
}

我的问题是,只要我将非JSON内容发送到端点,req.body就会为空。当我发送像{ "test": "test" }这样的JSON时,我可以再次看到它。

现在我的问题是,如何使用某些xml模块至少获取原始数据来处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

通过执行:

添加express-xml-bodyparser模块
npm install express-xml-bodyparser

并更改app.js以包含xml解析器,如下所示:

'use strict';

var SwaggerExpress = require('swagger-express-mw');
var express = require('express');
var app = express();
var xmlparser = require('express-xml-bodyparser');

module.exports = app; // for testing

var config = {
  appRoot: __dirname // required config
};

app.use(express.json());
app.use(express.urlencoded());
app.use(xmlparser());

SwaggerExpress.create(config, function(err, swaggerExpress) {
  if (err) { throw err; }

  // install middleware
  swaggerExpress.register(app);

  var port = process.env.PORT || 10010;
  app.listen(port);

  if (swaggerExpress.runner.swagger.paths['/hello']) {
    console.log('try this:\ncurl http://127.0.0.1:' + port + '/hello?name=Scott');
  }
});

这些东西现在有效。