已经尝试了很多教程,但不知怎的,我无法弄明白。 我正在使用mongodb和express.js 这是在我的server.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');
});
});
这是我的routes.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,但无法设法做到这一点
答案 0 :(得分:0)
相反,我建议你创建另一个文件,你只需要它想要使用它。假设:
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
它可能无法正常工作,因为它没有经过测试,但它可以让你有机会通过。
答案 1 :(得分:0)
这是一个回答问题。我用过
MongoClient.connect('mongodb://localhost:27017/test', (err, database)={
global.bigdb = database
});
并从例如
的路线中调用它var col = global.bigdb.collection('collectionname');
这是不好的做法吗?重读代码 - 它已经存在了一段时间 - 我也将redis客户端暴露为全局。
任何信息赞赏。没有错误报告,但我很好奇,如果我应该重构。
答案 2 :(得分:0)
app.use(function(req,res,next))
{
res.locals.yourvariable = null;
next();
});
这是我初始化全局变量的方法。希望你有个主意。