2017-01-09 56 views
0

我有一个允许json发布请求的快速API。但是,在我的场景中,我的一个API需要接受XML帖子正文,而不是JSON。快递API JSON和XML POST请求

所以我明确的应用程序设置细使用:

// Init App 
var app = express(); 

// BodyParser Middleware 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: false 
})); 

这里是我的岗位API JSON路径的一个例子:

router.post('/', function(req, res, next) { 
    defaultPoll.create(req.body, function(err, post) { 
    if (err) { console.log(err) 
    } else {res.json(post); 
    } 
    }); 
}); 

,当我在我的JSON值传递例如伟大的工程这是我的POST请求:

{ 
    "milliseconds":"600" 
} 

但现在我有我想要做一个POST请求的API,但我的POST请求需要被发送的为XML。所以这是我的API看起来像:

router.post('/test', function(req, res) { 
    var body = req 
    console.log(body) 
}); 

没什么复杂的,因为我没有得到任何回报。这是我如何做POST请求:

<?xml version="1.0"?> 
<methodCall> 
    <methodName>myMethod</methodName> 
    <params> 
     <param> 
     <value><string>hello</string></value> 
     </param> 
    </params> 
</methodCall> 

但是,我的身体回来了空。任何想法如何我可以解决这个问题?理想情况下,我想采用此XML请求,然后用我选择的XML进行响应。做这个的最好方式是什么?

接受请求,转换成JSON,写入JSON响应并转换回XML响应?

任何帮助将不胜感激!

回答

3

bodyParser仅支持以下格式(如果你使用身体的解析器):

  • JSON解析器身体
  • 原体解析器
  • 正文解析器
  • URL编码form body parser

所以如果你想解析XML,我建议你使用express-xml-bodyparser

var xmlparser = require('express-xml-bodyparser'); 
app.use(xmlparser()); 

app.post('/test', function(req, res, next) { 
    // req.body contains the parsed xml 
}); 

我希望这可以帮助您在正确的方向

+0

是有可能只是做一个API路线虽然?考虑到我有很多JSON路由,并且只需要这一个XML文档中的一个 – noDe1

+0

,它看起来像你可以同时拥有两个,并且express会看到请求的内容类型并使用正确的路由。 https://www.npmjs.com/package/express-xml-bodyparser这是一个猜测,虽然 –

+1

我在我的API中都使用了这两个解析器,并且都可以工作。 express-xml-bodyparser通过MIME类型检测内容。 –