我是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>
答案 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');
}
});
这些东西现在有效。