Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数据库连接的正确nodejs架构是什么?_Javascript_Node.js_Database_Mongodb_Express - Fatal编程技术网

Javascript 数据库连接的正确nodejs架构是什么?

Javascript 数据库连接的正确nodejs架构是什么?,javascript,node.js,database,mongodb,express,Javascript,Node.js,Database,Mongodb,Express,我通常在侦听以下端口之前连接到数据库: //server.js connect(process.env.mongo_url,{useNewUrlParser:true},(err,client)=>{ 如果(错误)抛出错误 console.log('db connected') global.db=client.db(数据库名称); app.listen(process.env.port | | 3000,()=>{ console.log(`正在侦听的服务器http://localhost:$

我通常在侦听以下端口之前连接到数据库:

//server.js
connect(process.env.mongo_url,{useNewUrlParser:true},(err,client)=>{
如果(错误)抛出错误
console.log('db connected')
global.db=client.db(数据库名称);
app.listen(process.env.port | | 3000,()=>{
console.log(`正在侦听的服务器http://localhost:${process.env.port | | 3000}`)
})
});
并通过全局变量的连接使用它。最近,我开始添加服务层,以便从其他几个地方使用相同的服务。我还将lib集成到我的服务中,以便可以从终端执行服务功能。例如,
节点用户服务.js注册以下服务

//usersService.js
exports.register=(电子邮件、密码)=>{
//注册用户的业务逻辑
}
要求(“使可运行”);
//userscocontroller.js
导入usersService=require(“./services/usersService”)
路由器.post('/register',异步(req,res)=>{
usersService.register(req.body.email、req.body.password)
...
})
由于该服务需要db连接,我创建了一个db模块并编辑了该服务:

//db.js
const{MongoClient}=require('mongodb')
函数连接(){
返回新承诺((解决、拒绝)=>{
log(`Trying to connect to${process.env.mongo_url}`)
connect(process.env.mongo_url,{useNewUrlParser:true},(err,client)=>{
如果(错误)返回拒绝(错误)
console.log('db connected')
解析(client.db(数据库名称))
});
})
}
exports.connect=connect
//usersService.js
exports.register=(电子邮件、密码)=>{
//如果从终端执行,则连接到数据库
if(require.main==模块)
var db=await require('../../db.js').connect()
}
//注册用户的业务逻辑
}
要求(“使可运行”);
这种结构有效。但我添加到db连接服务中的代码片段,以防从终端执行,这似乎令人不快。我需要将其添加到所有服务功能中。如何构建项目,以便从需要db连接的终端调用每个服务功能?欢迎提出任何架构建议