javascript - 如何从 Mongoose 顺序检索数据?

标签 javascript node.js mongodb mongoose mongoose-schema

get: function (code) {
    console.log('Retrieving model for code : ', code);
    let database = UTILS.getDatabase('databaseName');
    return database.models.modelName.find({})
        .then(function (users) {
            console.log(' ----------- ', users);
            return users;
        })
        .catch(function (error) {
            return '{success: "false", msg: "Error found : ' + error + '"}';
        });
}

这段代码运行没有任何错误,但是调用“get”的函数找不到任何记录,而回调函数在控制台中打印了大约 8-9 条记录。我知道这是回调功能,但我需要按顺序发生。

我还尝试将yield 返回yield database.models.modelName.find({})*函数一起使用,但得到{},一个空对象。

请建议一种避免回调并从 mongodb 获取数据的方法。

谢谢 Julien,但我不能使用回调,因为调用“get”的函数具有处理从 mongoose 返回对象的逻辑。

嗨,Ravi,这是该进程堆栈的完整流程。 Route -> Controller -> Facade -> Service -> Dao(我贴的代码属于Dao层的get函数)

这看起来是典型的类型化语言解决方案,但我需要这样。

一个Service层函数可以从多个模型收集数据,并且可以集中处理,所以回调过程不能满足我的要求。

我完全陷入困境,感谢您的帮助:)

路由器:

app.route('/nodics/users')
.get(CONTROLLER.UserController.get)
.post(CONTROLLER.UserController.set);   

Controller :

get: function (request, response, error) {      
    let users = FACADE.UserFacade.get();
    response.json(users);
}

外观:

get: function (code) {
    console.log('inside Facade call....', code);
    return SERVICE.UserService.get(code);
}

服务:

get: function (code) {
    console.log('inside Service call....', code);
    return DAO.UserDao.get(code);
}

Dao 方法已经在顶部了。这是一个分层实现示例。但我只想以这种方式实现而已。这样我就可以在Service层随时随地调用DAO层方法。

用例:

1. I want to add one item into cart, so I pass, PID, SKUID and quantity to the router, which simply pass controls to controller.
2. Controller pass it to facade and Service.
3. In service layer
     1. Call another service to check if quantity is valid
     2. Call DAO to load product item
     3. Call another DAO to load Inventory (or use from first call)
     4. Call another DAO to load price item, based on local and currency, or other parameters.
     5. Finally load ORDER and add this item into it and save it
     6. Return order item to facade layer
4. In Facade, apply filter to return only fields required to expose as service.

所以如果我想实现这个用例,通过从 mongoose 回调获取数据将不会有帮助。

所以请建议我直接从 Mongoose 获取数据而不使用回调的方法。

最佳答案

您需要将回调传递给您的函数并从您的 promise 中调用它:

get: function (code, cb) {
    console.log('Retrieving model for code : ', code);
    let database = UTILS.getDatabase('databaseName');
    return database.models.modelName.find({})
        .then(function (users) {
            console.log(' ----------- ', users);
            cb(users);
        })
        .catch(function (error) {
            cb({success: "false", msg: "Error found : ' + error + '"});
        });
}

关于javascript - 如何从 Mongoose 顺序检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44226502/

相关文章:

javascript - jQuery:将 img alt 标签更改为列表值

javascript - 对于文件选择器 openFileChooser() 方法不调用 Kitkat 4.4 的 WebChromeClient

node.js - 使用 Oauth 的 Google API 仅供公司内部使用

javascript - 为什么我的第一个数组项总是包含 'Function' ?

mongodb - 如何优雅地关闭在 docker 中运行的 monogodb 0.8

javascript - Uncaught ReferenceError : "$ is not defined"

javascript - 从radio selection中找到label img并应用到单独的img src

node.js - 如何跳过node.js中的异步调用

node.js - Nginx X-Accel-Redirect 不适用于 node.js

mongodb - 如何将发现限制为 MongoDB 聚合中的唯一值