gpt4 book ai didi

javascript - express .js : calling internal services

转载 作者:行者123 更新时间:2023-11-30 12:37:33 25 4
gpt4 key购买 nike

我对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com