已经尝试了很多教程,但不知何故我无法弄清楚。我正在使用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();
});
这就是我初始化全局变量的方式。希望你有一个想法。