【问题标题】:JSONP support with node.js and mongoJSONP 支持 node.js 和 mongo
【发布时间】:2014-05-07 08:58:30
【问题描述】:

我正在尝试使用 node.js、express、mongo 和 mongodb 创建一个简单的 Web 服务,它根据 URL 中的参数从 mongodb 返回结果。我想为调用添加 jsonp 支持。该服务将被这样调用:

localhost:3000/database/collection/get?param1=Steve&param2=Frank&callback=foo

app.js

var mongo_address = 'localhost:27017/database';
var db = monk(mongo_address);
app.get('/:coll/get', routes.handle(db);

路由/index.js

exports.handle = function(db) {
    return function(req, res) {

        // Send request
        db.get(req.params.coll).find(req.query, {fields:{_id:0}}, function(e,docs) {
            if (e) throw e;         
            res.jsonp(docs)
        });
    };
}

当我使用 res.jsonp 的内置 JSONP 支持时,它会将回调参数发送到 mongo 并返回一个空列表。我尝试在查询期间删除回调参数,然后手动将其添加回结果中,但运气不佳。我觉得我错过了一些简单的东西。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript node.js mongodb express jsonp


    【解决方案1】:

    在对 JS 进行了一番折腾之后,我找到了一个可行的解决方案,并且只需要最少的额外代码。从查询中剥离回调并存储函数值后,我必须为 JSONP 请求显式构建返回字符串。

    exports.handle = function(db) {
        return function(req, res) {
            //Determine if URL implements JSONP
            var foundCallback = req.query.callback;
            var callbackVar;
            //If asking for JSONP, determine the callback function name and delete it from the map
            if (foundCallback){
                callbackVar = req.query.callback;
                delete req.query.callback
            }
    
            // Send request
            db.get(req.params.coll).find(req.query, {fields:{_id:0}}, function(e,docs) {
                if (e) throw e;
    
                //If callback, send function name and query results back, else use express JSON built in
                if (foundCallback)
                    res.send('typeof ' + callbackVar + ' === \'function\' && ' + callbackVar + '(' + JSON.stringify(docs) + ');');
                else
                    res.json(docs);
            });
        };
    }
    

    【讨论】:

      【解决方案2】:

      试试

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

      【讨论】:

        猜你喜欢
        • 2014-10-05
        • 1970-01-01
        • 2013-05-07
        • 2017-02-13
        • 1970-01-01
        • 2016-09-03
        • 2018-11-25
        • 2015-06-15
        • 2013-01-18
        相关资源
        最近更新 更多