2013-07-20 24 views
0

我爲node.js應用程序製作了一個原生的android應用程序客戶端和一個web應用程序客戶端。 android應用程序客戶端只接收json響應,而web應用程序客戶端接收到html響應。所以node.js服務器區分來自android應用程序和web應用程序的請求很重要。我嘗試使用http標頭接受來區分不同的請求。如果Accept頭是application/json,那麼服務器可以告訴請求來自android,如果Accept頭是html/text,那麼服務器可以告訴請求來自web應用程序in node.js express,如何判斷HTTP請求是application/json還是html內容negoition

這裏是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> 

是android客戶端發送HTTP請求

HttpPost post = new HttpPost(getURL); 
post.setHeader("Accept", "application/json;q=0.9,*/*;q=0.8"); 

兩個客戶端都ok,問題是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(文本/ html')仍equalls真。

我不知道爲什麼req.accepts(文本/ html')功能unexpectely

+0

你確定了Android HTTP客戶端是不是隱含發送'接受:文/ html'呢?您可以在express中使用'req.accepted'來按優先順序檢出要傳遞的不同accept頭的數組。無論如何,這可能是更有效的解決方案。 – pauljz

回答

1

Accept頭你從你的Android應用程序發送:

post.setHeader("Accept", "application/json;q=0.9,*/*;q=0.8"); 

你有*/*,這意味着您正在接受所有內容,包括text/html

它會正常工作,如果你會改變你的標題:

post.setHeader("Accept", "application/json"); 
相關問題