【问题标题】:How to save Backbone JSONP model to MongoDB using Node/Express?如何使用 Node/Express 将 Backbone JSONP 模型保存到 MongoDB?
【发布时间】:2013-11-27 01:28:53
【问题描述】:

我需要一种方法来在服务器端解析我的 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);
          }
    });

});

快递服务器,

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":"': '' }

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

【问题讨论】:

  • 为什么我没有收到答案,我的问题有什么问题?

标签: node.js express jsonp marionette


【解决方案1】:

您无法解析结果,因为它不是有效的 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 之类的 URL,我相信它会起作用。 Backbone 似乎在 URL 中的值中添加了额外的编码,这使得解析更加困难。

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

【讨论】:

  • 感谢您的回复,我已经注释掉了该行并尝试分配原始回调变量,例如“jQuery20301659487988231888_1385372097880”,但仍然没有运气,您还有其他建议吗?
  • 再看一遍,我很确定 bug 出现在 Backbone 端。您正在构建一段非常疯狂的 JSON,其中键(不是第二项的值是:{"text":{"en":"Text"},"type":"text","position":0,"align":"left","color":"。尝试大幅简化客户端上的内容,只需上传 foo: bar
  • 我已经简化了我的模型,但结果仍然相同,现在我有以下 URL http://192.168.20.62:9847/page?callback=jQuery20309653310032985027_1385469338355&{%22key%22:%22value%22}&_=1385469338356 和 request.query 为 { callback: 'jQuery20309653310032985027_1385469338355', '{"key":"value"}': '', _: '1385469338356' }
  • 我 99% 确定您的问题出在您的 Backbone 而不是您的 Express 代码中。您能否查找生成更像http://192.168.20.62:9847/page?callback=jQuery20309653310032985027_138546933835‌​&key=value&_=1385469338356 的 URL 的标准 Backbone 示例。例如,stackoverflow.com/questions/9093209/…
  • 只是为了更新你,我仍然无法解决问题,但事情是从这个问题开始的stackoverflow.com/questions/19947948/…,经过良好的锻炼,我已经开始运行了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2018-11-16
  • 2011-10-08
相关资源
最近更新 更多