ノードexpressにXML形式のPOSTリクエストをサポートするにはどうすればいいですか?
2436 ワード
expressはconnectに基づいて開発され、bodyParserを使用して要求されたパッケージを解析し、デフォルトでは
しかし、XML形式をインタフェースデータ交換として使用している人もいます.例えば、MicrosoftのBing Translator HTTP APIや、テンセント微信の公衆プラットフォームインタフェースなどです.前にjsはBing Translatorインタフェースを呼び出す時にNodeを使ったことがある.jsのxml 2 jsライブラリは、XMLをJSON形式に変換して、私たちのプログラムの解析を容易にすることができます.ここではxml 2 jsを使用してexpressを拡張してXML形式のリクエストをサポートすることもできます.
var express = require('express'),
var app = express();
var utils = require('express/node_modules/connect/lib/utils'), xml2js = require('xml2js');
function xmlBodyParser(req, res, next) {
if (req._body) return next();
req.body = req.body || {};
//ignore GET
if ('GET' == req.method || 'HEAD' == req.method) return next();
//check Content-Type
if ('text/xml' != utils.mime(req)) return next();
//flag as parsed
req._body = true;
//parse
var buf = '';
req.setEncoding('utf8');
req.on('data', function(chunk){ buf += chunk });
req.on('end', function(){
var parseString = xml2js.parseString;
parseString(buf, function(err, json) {
if (err) {
err.status = 400;
next(err);
} else {
req.body = json;
next();
}
});
});
};
app.configure(function() {
app.use(express.logger('dev'));/* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser());
app.use(xmlBodyParser);
});
view raw xmlBodyParser.js hosted with by GitHub
参照先:
https://gist.github.com/davidkrisch/2210498
http://expressjs.com/api.html#bodyParser
http://stackoverflow.com/questions/11002046/extracting-post-data-with-express
https://groups.google.com/forum/?fromgroups=#!topic/express-js/6zAebaDY6ug
クリックしてTwitterで共有する(新しいウィンドウでクリックしてFacebookで共有する(新しいウィンドウでクリックしてGoogle+で共有する(新しいウィンドウでを開く)
application/json
、application/x-www-form-urlencoded
、multipart/form-data
がサポートされています.すなわちXML形式のパケットの解析はサポートされていない.しかし、XML形式をインタフェースデータ交換として使用している人もいます.例えば、MicrosoftのBing Translator HTTP APIや、テンセント微信の公衆プラットフォームインタフェースなどです.前にjsはBing Translatorインタフェースを呼び出す時にNodeを使ったことがある.jsのxml 2 jsライブラリは、XMLをJSON形式に変換して、私たちのプログラムの解析を容易にすることができます.ここではxml 2 jsを使用してexpressを拡張してXML形式のリクエストをサポートすることもできます.
var express = require('express'),
var app = express();
var utils = require('express/node_modules/connect/lib/utils'), xml2js = require('xml2js');
function xmlBodyParser(req, res, next) {
if (req._body) return next();
req.body = req.body || {};
//ignore GET
if ('GET' == req.method || 'HEAD' == req.method) return next();
//check Content-Type
if ('text/xml' != utils.mime(req)) return next();
//flag as parsed
req._body = true;
//parse
var buf = '';
req.setEncoding('utf8');
req.on('data', function(chunk){ buf += chunk });
req.on('end', function(){
var parseString = xml2js.parseString;
parseString(buf, function(err, json) {
if (err) {
err.status = 400;
next(err);
} else {
req.body = json;
next();
}
});
});
};
app.configure(function() {
app.use(express.logger('dev'));/* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser());
app.use(xmlBodyParser);
});
view raw xmlBodyParser.js hosted with by GitHub
参照先:
https://gist.github.com/davidkrisch/2210498
http://expressjs.com/api.html#bodyParser
http://stackoverflow.com/questions/11002046/extracting-post-data-with-express
https://groups.google.com/forum/?fromgroups=#!topic/express-js/6zAebaDY6ug
クリックしてTwitterで共有する(新しいウィンドウでクリックしてFacebookで共有する(新しいウィンドウでクリックしてGoogle+で共有する(新しいウィンドウでを開く)