2013-07-03 24 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

相关问题