将Backbone与Nodejs集成

时间:2014-02-07 01:19:18

标签: javascript node.js backbone.js

尝试从Backbone Model获取Nodejs响应。

更新
将模型代码更改为以下内容并获取错误

  

XMLHttpRequest无法加载http://localhost:3000/getDifficulty。没有   请求中存在“Access-Control-Allow-Origin”标头   资源。因此,不允许原点'null'访问。

var Bitcoin = Backbone.Model.extend({
    url:'http://localhost:3000/getDifficulty'
});

var info = new Bitcoin ();
info.fetch();

Node JS非常简单,适用于网址http://localhost:3000/getDifficulty

服务器端节点JS

var http = require('http'),
    express = require('express'),
    bitcoin = require('bitcoin');

var app = express();

var client = new bitcoin.Client({
    host: 'localhost',
    port: 8332,
    user: 'himanshuy',
    pass: 'xxx'
});

app.get('/getDifficulty', function(req, res) {
    client.getInfo(function(err, info) {
        if(err) {
            res.send('Bitcoin error: '+ err);
        } else {
            res.send('Difficulty: ' + info);
        }
    });
});

app.listen(3000);

客户端骨干网模型

var Bitcoin = Backbone.Model.extend({
             urlRoot:'http://localhost:3000/getDifficulty' 
});

var info = new Bitcoin();

如果像这样给模型赋予一些价值,它可以正常工作

var info = new Bitcoin({version:"1.0.0.", balance:"20.03"});

这意味着模型没有从url获取结果。
请帮忙。

  

注意:我对骨干和Nodejs都是新手

2 个答案:

答案 0 :(得分:0)

尝试使用

var Bitcoin = Backbone.Model.extend({
         url:'getDifficulty' 
});

var info = new Bitcoin();
info.fetch();

然后查看控制台以查看服务器的响应。从它的外观来看,上面的代码不起作用,因为你没有返回一个json对象res.send('Difficulty: ' + info)。 Backbone期望提供JSON数据(并且只提供JSON),因此它可以将值加载到模型实例中。

如果您在加载到modekl之前需要修改从服务器返回的内容,则需要实现parse函数(请参阅http://backbonejs.org/#Model-parse):

var Bitcoin = Backbone.Model.extend({
         url:'getDifficulty',
         parse: function(response){
             // the return value should be what needs to loaded into the model
             // for example, if we need to only have the `data`attribute in the model:
             return response.data;
         }
});

答案 1 :(得分:0)

如果您收到

等错误
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'null' is therefore not allowed access.

您可能需要将浏览器配置为禁用CORS或Web安全设置。 This Chrome extension should get around that error.

在Firefox中,Force CORS extension is helpful.

使用某个命令行参数启动Chrome也可以防止这些类型的错误,但代价是像XSS这样的漏洞变得更容易受到影响:在目标字段的Windows上,这样做 - 导致浏览器安全性降低好:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-web-security