2011-12-23 73 views
0

这是(使用fetch的NodeJS和骨干获取

var MyModel = Backbone.Model.extend(); 
    var MyCollection = Backbone.Collection.extend({ 
     url: '/questions', 
     model: MyModel 
    }); 
    var coll = new MyCollection(); 
    coll.fetch({ 
     error: function (collection, response) { 
      console.log('error', response); 
     }, 
     success: function (collection, response) { 
      console.log('success', response); 
     } 
    }); 

我的前端代码,这是(使用app.get

app.get('/questions', function (request, response) { 
    console.log('Inside /questions'); 
    response.writeHead(200, { 
     'Content-Type': 'text/json' 
    }); 
    response.write('{test:1}'); 
    response.end(); 
}); 

的问题我的后端代码是,虽然响应如预期的那样,调用客户端error回调。当我删除行response.write('{test:1}');时,调用success回调。任何想法,我可能做错了什么?

回答

4

那么{test:1}是无效的JSON。

{ "test":"1" } OR { "test":1 } 然而,这些尝试之一代替。

键是JSON中的字符串,并且JSON中的字符串必须用双引号括起来,查看JSON.org以获取更多信息。

为确保您拥有有效的JSON用于更复杂的对象只是使用JSON.stringify()

var obj = { test : 1 }; 
response.write(JSON.stringify(obj)); //returns "{"test":1}" 

此外,correct Content-Type for jsonapplication/json

+0

非常感谢!这确实是个问题。 – Randomblue 2011-12-23 15:32:52

+0

有没有办法了解有关错误的更多信息?在将来,我希望被告知这是JSON是无效的...... – Randomblue 2011-12-23 15:34:36

+0

我不是一个大'node.js'或'backbone'的人。我猜想错误响应中有一些信息;如果没有,我会发布另一个问题,对不起.. – Chad 2011-12-23 15:36:34

1

如果你使用的表达,你需要res.send将自动转换对象转换成JSON。如果你担心它,有一个叫res.json的新东西可以将任何东西转换成JSON。

var obj = {super: "man"} 
res.send(obj) // converts to json 
res.json(obj) // also converts to json 

您不需要writeHead(),write()或end()。

http://expressjs.com/guide.html