2013-07-03 4 views
0

JSON Вот экспресс-кодNode.js Express.js не всегда посылает правильный

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

По какой-то причине ответ JSON возвращается как этот

OK{ id: 1234} 

Почему ОК там?

EDIT

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, поэтому некоторые инструменты могут его установить. Пробовали ли вы «завиток» или смотрели на вкладку сети инструментов разработки webkit? –

+0

Я видел это в weinre, когда я отлаживал браузер для Android. Все работает отлично в хроме, но не на родной Android. в представлении сети вы можете видеть заголовки, и иногда контент будет иметь ок, а иногда и нет. Когда это было хорошо, браузер подумал, что это приложение типа mime/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

Спасибо за совет. Он имеет тот же эффект. Теперь я думаю, что это связано с тем, как я обрабатываю опцию preflight, но я все еще застрял, потому что код, который я использую, кажется, работает для всех остальных. – whitehead1415

Смежные вопросы