javascript - express .js : calling internal services

标签 javascript node.js mongodb rest express

我对 node.js、express.js 和 REST API 有点陌生。

这是我的问题:

在多种情况下,我需要从我的数据库(如果相关的话是 mongoDB)加载用户信息。

这种情况下的最佳做法是什么?

1)直接从数据库加载:

索引.js:

db.collection('usercollection').findOne({email:  req.user.email}, function(err, result){...

2) 从另一个从数据库读取的路由调用服务:

用户.js :

/* GET user by email */
router.get('/:email', function(req, res) {

    var db = req.db;
    var email = req.params.email;
    db.collection('usercollection').findOne({email:  email}, function(err, result) {
    if (err) throw err;
    res.json(result);
    });

});

索引.js:

//调用users/email/emailParameterURL

3) 这两个都不是?

谢谢你的时间

最佳答案

就我个人而言,我尽量将我的应用程序逻辑与 Express 路由分开。

因此,我创建了自己的 Controller 模块(或随意调用它们),它们接收数据库和配置变量(允许稍后在需要时换出,或模拟测试)。

在路由中,我使用这些 Controller 类,将它们传递给数据库。

这使我能够快速、干净地对我的核心逻辑进行单元测试,而无需处理 express。否则,最终只能对路由进行集成测试。

它还允许您稍后轻松更改路线,而不会破坏您的应用程序。

另外,我不推荐Bluebird promises足够的。这些让我大大简化了事情,避免了很多回调 hell 。

一个小例子:

/// usercontroller.js
var UserController = {
   _database: null,
   setDatabase: function(db) { this._database = db; },

   findUserByEmail: function(email, callback) {
       this._database.collection('usercollection').findOne({email:  req.user.email}, callback);
   }
};

module.exports = UserController;

/// routes.js

/* GET user by email */
router.get('/:email', function(req, res) {
    var UserController = require('./usercontroller');
    var db = req.db;
    UserController.setDB(db);
    UserController.findUserByEmail(req.params.email, function(err, result) {
        if (err) throw err;
        res.json(result);
    });
});

关于javascript - express .js : calling internal services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609893/

相关文章:

javascript - 如何查询某个字段值最高的文档

html - Node.js Web 应用程序中的 ECONNRESET、MongoNetworkError

javascript - 如何在 angularjs 中打印 {{something}}?

javascript - 在 Three.js 中加载随机纹理

javascript - 如何获取 imageLoaded 的参数 "someelement"?

node.js - 同一服务器上的多个 Node.js 设置

android - Liveview 在 Appcelerator Studio 的合金项目中不起作用(在经典项目中工作正常)

javascript - 空格在此 JS 正则表达式中的意义?

node.js - 如何在文件夹中安装npm

javascript - MongoDB:您可以将一个集合作为字段包含在另一个集合的文档中吗?