我为 node.js 应用程序制作了一个原生 android 应用程序客户端和一个 Web 应用程序客户端。android app客户端只接收json响应,web app客户端接收html响应。所以node.js服务器区分android app和web app的请求很重要。我尝试使用 http 标头Accept来区分不同的请求。如果 Accept header 是 application/json,那么服务器可以判断请求来自 android,如果 Accept header 是 html/text,那么服务器可以判断请求来自 web app
这是使用表单发送请求的 Web 应用程序客户端
<div class="input">
<input id="id_username" type="text" name="username" maxlength="75" />
</div>
<div class="input">
<input type="password" name="password" id="id_password" />
</div>
<input type="submit" value="Log in" class="btn btn-green"/>
</form>
这是发送http请求的android客户端
HttpPost post = new HttpPost(getURL);
post.setHeader("Accept", "application/json;q=0.9,*/*;q=0.8");
两个客户端都正常,问题出在 node.js 服务器上。
if(req.accepts('text/html')){
res.redirect('/login');
return;
}
else if(req.accepts('application/json')){
res.json({'msg':'user or password not valid'});
return;
}
这个片段的问题是,即使 req.accepted 是 application/json,req.accepts('text/html') 仍然等于 true。
我不知道为什么 req.accepts('text/html') 会意外运行