【发布时间】:2015-10-29 22:55:35
【问题描述】:
所以这将很难解释,我尽力而为。 我有一个 iOS 应用程序和 android 在他们的 web 视图中点击相同的 node.js 应用程序。 iOS Web 视图可以很好地打开 node.js 应用程序。然而,安卓遇到了麻烦。我已经将它追踪到一个被命中的路由函数:
app.post('/', auth.processDeviceLogin);
在我的身份验证页面上:
exports.processDeviceLogin = function(req, res){
var param;
if(typeof req.body.metaData !== 'undefined'){
param = req.body;
}
else {
//Android will hit this condition as items are not posted with application/json content type.
param = JSON.parse(Object.keys(req.body));
}
auth.makeDeviceLoginRequestQ(
stuff
).then(function(_data) {
return moreStuff;
})
.then(function(_user){
return againMoreStuff;
})
.spread(function(_user, token){
//blah blah blah
res.render('device', obj);
})
.catch(function(error){
res.json({status:"fail", reason:error});
})
.done();
};
这是我遇到的情况:当我调试代码并逐步执行时,我正确收到了第一个请求。所有标题/正文/等都是从应用程序接收的。然而,突然之间,这个函数再次被调用并且请求信息大部分是空的。正文为空,一些标头信息在那里,但内容类型为空。它抛出
SyntaxError:输入意外结束 在 Object.parse (本机) 在exports.processDeviceLogin 行
param = JSON.parse(Object.keys(req.body))
这个错误提示一个简单的语法错误,但我已经调试了很多。我什至硬编码了从 iOS 版本获得的相同参数值,但无济于事。我猜这与从某个地方进来的第二个空请求有关。
这个函数被命中两次,被调用者是(Express路由器包的一部分):
Layer.prototype.handle_request = function handle(req, res, next) {
var fn = this.handle;
if (fn.length > 3) {
// not a standard request handler
return next();
}
try {
fn(req, res, next);
} catch (err) {
next(err);
}
};
我想我的问题是,什么会导致使用空 request(req) 值再次调用此函数?我完全迷路了。任何帮助都会很棒。 非常感谢
【问题讨论】:
标签: javascript android node.js express