2013-03-27 3 views
1

У меня есть приложение Node.js Heroku на Facebook, и я продолжаю находить следующую ошибку в журналах (при получении общей ошибки приложения, когда я на самом деле пытаюсь получить доступ к моему приложение):SyntaxError: Не удалось разобрать тело JSON: Неожиданный токен o

2013-03-27T12:58:54+00:00 heroku[web.1]: Starting process with command `node web 
.js` 
2013-03-27T12:58:55+00:00 app[web.1]: info: socket.io started 
2013-03-27T12:58:55+00:00 app[web.1]: Listening on 6925 
2013-03-27T12:58:56+00:00 heroku[web.1]: State changed from starting to up 
2013-03-27T13:00:40+00:00 app[web.1]:^
2013-03-27T13:00:40+00:00 app[web.1]: undefined:1 
2013-03-27T13:00:40+00:00 app[web.1]: 
2013-03-27T13:00:40+00:00 app[web.1]: SyntaxError: Failed to parse JSON body: Un 
expected token o 
2013-03-27T13:00:40+00:00 app[web.1]:  at Object.parse (native) 
2013-03-27T13:00:40+00:00 app[web.1]:  at EventEmitter.emit (events.js:99:17) 

2013-03-27T13:00:40+00:00 app[web.1]: SyntaxError: Unexpected token S 
2013-03-27T13:00:40+00:00 app[web.1]:  at EventEmitter.mixin._fireError (/app 
/node_modules/faceplate/node_modules/restler/lib/restler.js:192:10) 
2013-03-27T13:00:40+00:00 app[web.1]:  at IncomingMessage.parsers.json (/app/ 
node_modules/faceplate/node_modules/restler/lib/restler.js:367:9) 
2013-03-27T13:00:40+00:00 app[web.1]:  at EventEmitter.FaceplateSession.get (
/app/node_modules/faceplate/index.js:121:25) 
2013-03-27T13:00:40+00:00 app[web.1]:  at mixin._responseHandler (/app/node_m 
odules/faceplate/node_modules/restler/lib/restler.js:142:20) 
2013-03-27T13:00:40+00:00 app[web.1]:  at EventEmitter.mixin._encode (/app/no 
de_modules/faceplate/node_modules/restler/lib/restler.js:184:29) 
2013-03-27T13:00:40+00:00 app[web.1]:  at IncomingMessage.parsers.auto (/app/ 
node_modules/faceplate/node_modules/restler/lib/restler.js:356:21) 
2013-03-27T13:00:40+00:00 app[web.1]:  at mixin._responseHandler (/app/node_m 
odules/faceplate/node_modules/restler/lib/restler.js:140:16) 
2013-03-27T13:00:40+00:00 app[web.1]:  at EventEmitter.mixin._decode (/app/no 
de_modules/faceplate/node_modules/restler/lib/restler.js:156:7) 
2013-03-27T13:00:41+00:00 heroku[web.1]: Process exited with status 1 
2013-03-27T13:00:41+00:00 heroku[web.1]: State changed from up to crashed 

В моем коде сервера, я использую JSON.stringify, например, console.log(data + ': is in the tags table, with tag_id=' + JSON.stringify(result)); где result - ответ, возвращенный из запроса в базу данных Postgres. Тем не менее, я никогда не использую JSON.parse, так что эта ошибка немного запутанна, также у меня никогда не было этой ошибки до сегодняшнего дня (мое приложение отлично работало в понедельник).

То, что также сбивает с толку, заключается в том, что если я прокомментирую вызовы JSON.stringify, я до сих пор получаю ошибку, поэтому любые идеи были бы очень оценены!

Согласно https://github.com/heroku/faceplate/issues/26, я сделал следующие изменения в мой код:

function handle_facebook_request(req, res) { 

    // if the user is logged in 
    if (req.facebook.token) { 

async.parallel([ 
    function(cb) { 
    // query 4 friends and send them to the socket for this socket id 
    req.facebook.get('/me/friends', { limit: 4 }, function(friends) { 
     req.friends = JSON.parse(JSON.stringify(friends)); 
     cb(); 
    }); 
    }, 
    function(cb) { 
    // query 16 photos and send them to the socket for this socket id 
    req.facebook.get('/me/photos', { limit: 16 }, function(photos) { 
     req.photos = JSON.parse(JSON.stringify(photos)); 
     cb(); 
    }); 
    }, 
    function(cb) { 
    // query 4 likes and send them to the socket for this socket id 
    req.facebook.get('/me/likes', { limit: 4 }, function(likes) { 
     req.likes = JSON.parse(JSON.stringify(likes)); 
     cb(); 
    }); 
    }, 
    function(cb) { 
    // use fql to get a list of my friends that are using this app 
    req.facebook.fql('SELECT uid, name, is_app_user, pic_square FROM user WHERE uid in (SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user = 1', function(result) { 
     req.friends_using_app = JSON.parse(JSON.stringify(result)); 
     cb(); 
    }); 
    } 
], function() { 
    render_page(req, res); 
}); 

    } else { 
    render_page(req, res); 
    } 
} 

Каждая строка с req.???? например req.friends раньше был как req.friends = friends;, то есть я добавил оба звонка и JSON.stringify, и ничего не изменилось.

+0

Вы можете оставить (спасибо моему побуждая!) результат строки – user568109

+1

это может быть связано с ошибкой в ​​restler см. здесь https://github.com/heroku/faceplate/issues/26 – user568109

+0

@ user568109, 'client.query ('SELECT tag_id FROM tags WHERE tag_text = \' '+ data + '\'; ', function (err, result) {'- это строка, в которой мы получаем результат. Пример, который я дал в моем вопросе, был только одним из многих случаев использования JSON.stringify()', и я у меня не было проблем. Что касается собственно результата, это не строка, я использую 'JSON.stringify()' в соответствии с примером [здесь] (https://devcenter.heroku.com/ar ticles/Heroku-# PostgreSQL подключения-в-nodejs). Кроме того, я не использую restler. –

ответ

1

Как уже упоминалось ранее, решение можно найти здесь: https://github.com/heroku/faceplate/issues/26 Следует отметить, однако, что в настоящее время существует более подробную информацию о фиксации его вер 0.0.4 планшайбы

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