mirror of
https://github.com/zhigang1992/deployd.git
synced 2026-05-27 14:30:50 +08:00
added more intelligent JSON parsing
This commit is contained in:
@@ -14,33 +14,41 @@ exports.setup = function(req, res, next) {
|
||||
, handler = corser.create({supportsCredentials: true, methods: ALLOWED_METHODS, origins: origins});
|
||||
|
||||
handler(req, res, function () {
|
||||
if (req.method === "OPTIONS") {
|
||||
// End CORS preflight request.
|
||||
res.writeHead(204);
|
||||
res.end();
|
||||
} else {
|
||||
var mime = req.headers['content-type'] || '';
|
||||
mime = mime.split(';')[0]; //Just in case there's multiple mime types, pick the first
|
||||
req.cookies = res.cookies = new Cookies(req, res);
|
||||
|
||||
if(~req.url.indexOf('?')) {
|
||||
try {
|
||||
req.query = parseQuery(req.url);
|
||||
} catch (ex) {
|
||||
res.setHeader('Content-Type', 'text/plain');
|
||||
res.statusCode = 400;
|
||||
res.end('Failed to parse querystring: ' + ex);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
switch(req.method) {
|
||||
case 'OPTIONS':
|
||||
// End CORS preflight request.
|
||||
res.writeHead(204);
|
||||
res.end();
|
||||
break;
|
||||
case 'POST':
|
||||
case 'PUT':
|
||||
case 'DELETE':
|
||||
var mime = req.headers['content-type'] || 'application/json';
|
||||
mime = mime.split(';')[0]; //Just in case there's multiple mime types, pick the first
|
||||
|
||||
req.cookies = res.cookies = new Cookies(req, res);
|
||||
|
||||
if(~req.url.indexOf('?')) {
|
||||
try {
|
||||
req.query = parseQuery(req.url);
|
||||
} catch (ex) {
|
||||
res.setHeader('Content-Type', 'text/plain');
|
||||
res.statusCode = 400;
|
||||
res.end('Failed to parse querystring: ' + ex);
|
||||
return;
|
||||
if(autoParse[mime]) {
|
||||
autoParse[mime](req, res, mime, next);
|
||||
} else {
|
||||
if(req.headers['content-length']) req.pause();
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
||||
if(autoParse[mime]) {
|
||||
autoParse[mime](req, res, mime, next);
|
||||
} else {
|
||||
if(req.headers['content-length']) req.pause();
|
||||
break;
|
||||
default:
|
||||
next();
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -68,7 +76,18 @@ var parseBody = exports.parseBody = function(req, res, mime, callback) {
|
||||
}
|
||||
|
||||
try {
|
||||
req.body = parser.parse(buf);
|
||||
if(buf.length) {
|
||||
if(mime === 'application/json' && '{' != buf[0] && '[' != buf[0]) {
|
||||
res.setHeader('Content-Type', 'text/plain');
|
||||
res.statusCode = 400;
|
||||
res.end('Could not parse invalid JSON');
|
||||
return;
|
||||
}
|
||||
|
||||
req.body = parser.parse(buf);
|
||||
} else {
|
||||
req.body = {};
|
||||
}
|
||||
callback();
|
||||
} catch (ex) {
|
||||
res.setHeader('Content-Type', 'text/plain');
|
||||
|
||||
Reference in New Issue
Block a user