如何使用Node / Express将Backbone JSONP模型保存到MongoDB?

时间:2013-11-14 06:15:29

标签: node.js express jsonp marionette

我需要一种方法在服务器端解析我的JSONP对象以保存它,由于跨域原因问题我已经将我的通信方式从JSON转移到JSONP但没有找到任何合适的方法来解析服务器端的JSONP以节省它到数据库。

以下是模型,

define(['backbone'],function(Backbone){
  'use strict';

    return Backbone.Model.extend({
        url:"http://crossdomain:9847/page",
        defaults: {
                type:'text',
                position:0,
                align:'left',
                text:{"en":""},
                color:"#000",
                weight:'normal',
                size:"14px",
                font:"Verdana",
                pageid:'askdkasdkgaskdgks'

        },
        idAttribute:'_id',
        sync: function(method, collections, options) {
            options.dataType = "jsonp";
            return Backbone.sync(method, collections, options);
          }
    });

});

Express Server,

var express = require('/root/node_modules/express');

var page = require('./routes/page.js');

var app = express();

app.configure(function () {
    app.use(express.json());
    app.use(express.urlencoded());
    app.set("jsonp callback", true);
})

app.get('/page', page.updatePage);

app.listen(9847);

exports.updatePage = function(req, res) {
    console.log(req.query);
    // Here how I can parse the req is my problem 
    // so I can save object to database?
}

网址正在生成,

http://crossdomain:9847/page?callback=jQuery203010156283635587138_1384408493698&{%22text%22:{%22en%22:%22Text%22},%22type%22:%22text%22,%22position%22:0,%22align%22:%22left%22,%22color%22:%22#000%22,%22weight%22:%22normal%22,%22size%22:%2214px%22,%22font%22:%22Verdana%22,%22pageid%22:%22askdkasdkgaskdgks%22}&_=1384408493700

我能够收到,

{ callback: 'jQuery203010156283635587138_1384408493698',
  '{"text":{"en":"Text"},"type":"text","position":0,"align":"left","color":"': '' }

现在我该如何解析这个?我可以从callback参数获得回调,但是如何获取实际数据?

1 个答案:

答案 0 :(得分:0)

您无法解析结果,因为它不是有效的JSON。你的问题可能在这一行:

app.set("jsonp callback", true);

这是您设置JSONP callback variable的位置,例如将其从默认的callback更改为callbackVariable

只需注释掉那一行,你得到的JSONP就可以解析了。或者,您可能还需要修复Backbone如何构建JSONP URL。如果您改为使用http://crossdomain:9847/page?callback=jQuery203010156283635587138_1384408493698&type=text&position=0&align=left&color=%23000&weight=normal&size=14px&font=Verdana&pageid=askdkasdkgaskdgks之类的网址,我相信它会起作用。 Backbone似乎在URL中的值中添加了额外的编码,这使解析更加困难。

最后,如果您需要帮助从已经解析为Javascript对象的(有效)JSON字符串中轻松选择特定值,请查看lodash中的许多有用函数。