2013-07-03 36 views
0

這裏是明文密碼Node.js的Express.js並不總是發送有效的JSON

app.post('/v1/sessions' function(req,res){ 
    res.send({id:1234}); 
}); 

出於某種原因,JSON響應回來這樣

OK{ id: 1234} 

爲什麼是OK嗎?

編輯

好了,所以這裏是我的所有代碼。我不知道它會發送OK。

var express = require('express'); 
var app = express(); 

app.enable('trust proxy'); 
app.use(express.bodyParser()); 

app.all('*', function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-Requested-With"); 
    next(); 
}); 

app.post('/v1/sessions', function(req, res) { 
    if(req.body.email == '[email protected]' && req.body.password == 'testpass'){ 
    res.send(200, JSON.stringify({token:{id:'longstring',email:'[email protected]'}})); 
    } else { 
    res.send({code:403, error:"Invalid email or password"}); 
    } 
}); 

app.all('*', function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', '*'); 
    res.header('Access-Control-Allow-Methods', 'HEAD, GET, POST, PUT, DELETE, OPTIONS'); 
    res.header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, Origin, Accept'); 
    res.header('Access-Control-Allow-Credentials', 'true'); 

    if (req.method.toLowerCase() === 'options') { 
    res.send(200); 
    } else { 
    next(); 
    } 
}); 

app.listen(3000); 
console.log('Listening on port 3000'); 
+0

這不是你的全部代碼。您正在某處發送「確定」。 – Brad

+1

當你說「回覆像這樣回來」時,你如何確定?你使用什麼工具。 「確定」是對應於200狀態碼的文本,因此有些工具可能會將其放在那裏。您是否嘗試過'curl'或查看webkit開發工具網絡選項卡? –

+0

我在調試Android手機瀏覽器時在weinre中看到它。一切工作正常在鉻,但沒有在Android本機。在網絡視圖中,您可以看到標題,有時內容可以正常顯示,有時不會顯示。當它確定瀏覽器認爲它是MIME類型application/octet-stream – whitehead1415

回答

0

您可以替換這行:

res.send(200, JSON.stringify({token:{id:'longstring',email:'[email protected]'}})); 

這個,看看是否能解決它。 Express爲你做200和JSON.stringify,所以不要重新做。

res.send({token:{id:'longstring',email:'[email protected]'}}); 
+0

感謝您的建議。它具有相同的效果。我現在認爲它與我如何處理預檢選項有關,但我仍然陷入困境,因爲我使用的代碼似乎適用於其他人。 – whitehead1415

相關問題