2017-01-09 145 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類型檢測內容。 –