【问题标题】:Bacon.js and RxJS with Express.js and Mongoose.jsBacon.js 和 RxJS 与 Express.js 和 Mongoose.js
【发布时间】:2014-12-08 12:12:33
【问题描述】:

我在服务器端使用 Bacon.js 和 Express.JS(版本 4.x)

此方法从不响应!我在这里做错了什么吗?

var User = require('../data/User');
var Bacon = require('baconjs').Bacon;

module.exports = function(router){
       router.route('/users').get(function(req, res){

           var result = Bacon.fromNodeCallback(User.find, null);

           result.onValue(function(docs){
               res.status(200).send(docs);
           });

           result.onError(function(err){
               res.status(500).send(err);
           });

    });
};

显然我在使用 RxJS 时也失败了......

var User = require('../data/User');
var Rx = require('rx');

module.exports = function(router){
    router.route('/users').get(function(req, res){

        var query = Rx.Observable.fromNodeCallback(User.find)();

        query.subscribe(function(docs){
            res.send(docs);
        }, function(err){
            res.send('Error: ' + err);
        }, function(){
            console.log("COMPLETED");
        })

    });
};

这是返回的错误:

Error: TypeError: Cannot read property 'discriminatorMapping' of undefined

【问题讨论】:

  • 这看起来不错。 null 参数是故意的吗?您的意思是使用 null 调用 User.find,如:User.find(null, function(err, docs) { ...
  • 是的,我把那个 null 放在那里测试给它一个可选参数。
  • User.find 是否按预期工作?基本上,如果你完全跳过培根,只写User.find(null, function(err, docs) { if(err) { res.status(500).send(err); } else { res.status(200).send(docs); }}),这样行吗?
  • 是的,它与普通 API 完美配合
  • 这可能是绑定this 的问题吗?你可以尝试给User.find.bind(User)而不是User.find作为参数。

标签: node.js express functional-programming mongoose bacon.js


【解决方案1】:

您应该将Bacon.fromNodeCallBack 与对象一起使用:

Bacon.fromNodeCallback(User, "find", null);

这将为您的代码正确绑定this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2017-04-29
    相关资源
    最近更新 更多