有人可以解释一下如何在 express.js 中全局传递数据库变量



已经尝试了很多教程,但不知何故我无法弄清楚。我正在使用mongodb和express.js这是我的服务器.js

const express = require('express');
const subdomain = require('express-subdomain');
const bodyParser= require('body-parser');
const MongoClient = require('mongodb').MongoClient;
const routes = require('./routes');
const app = express();
var db;
app.set('view engine', 'pug');
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static('views'));
app.use(subdomain('api', routes.api));
MongoClient.connect('mongodb://localhost:27017/test', (err, database) => {
  if (err) return console.log(err);
  db = database;
  app.listen(3000, () => {
    console.log('listening on 3000');
  });
});

这是我的路线.js

const express = require('express');
const api = express.Router();
api.get('/', function (req, res) {
  db.collection('test').find().toArray((err, result) => {
    if (err) return console.log(err);
    res.render('api_orders', {test: result});
  });
});
module.exports = {
    api
}

我也想在路由中使用 db 变量,但它总是给我 db 未定义错误(显然(我读到我应该以某种方式导出 db var,但无法做到

相反,我建议您创建另一个文件,您只需在想要使用它的地方需要它。假设:

分贝.js:

const MongoClient = require('mongodb').MongoClient;
const db = function(){
    return MongoClient.connect('mongodb://localhost:27017/test', (err, database) => {
      if (err) return console.log(err);
      return database;
    });
}
module.exports = db;

现在,您可以在以下位置使用该db

const mydb = require('./db'); // <--require it to use

它可能不起作用,因为它没有经过测试,但它可以给你通过的想法。

这既是一个问题,也是一个答案。我用过

MongoClient.connect('mongodb://localhost:27017/test', (err, database)={
global.bigdb = database
});

例如,从路由调用它

var col = global.bigdb.collection('collectionname');

这是不好的做法吗?重新阅读代码 - 它已经上线了一段时间 - 我也将 redis 客户端公开为全局客户端。

任何信息赞赏。没有错误报告,但很好奇我是否应该重构。

app.use(function(req,res,next))
{
  res.locals.yourvariable = null; 
  next();
});

这就是我初始化全局变量的方式。希望你有一个想法。

相关内容

  • 没有找到相关文章