在 Node Express 应用程序的模块中使用变量
Using variables in modules of Node Express application
express 生成器创建了一个这样的应用程序:
主要 app.js:
var app = express();
//...
var routes = require('./routes/index');
app.use('/', routes);
//...
在routes/index.js
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
在 index.js 中使用我在 app.js 中定义的变量的最佳方法是什么?
例如,在定义路由之前,我设置了猫鼬模型:
var myModel;
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.once('open', function (callback) {
//load schemas
var dbSchema = require('./schema');
myModel = mongoose.model('mymodel', dbSchema.myModel);
});
如何在路由模块中使用 'myModel'?
当您在 app.js 文件中需要路由器时,将其作为参数传递。您将不得不稍微修改 index.js 文件
var express = require('express');
var myRouter = function(myModel) {
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
// You can use your myModel model here
return router;
}
module.exports = myRouter
现在在你的app.js
里面
var app = express();
//...
// Pass myModel as a parameter
var routes = require('./routes/index')(myModel);
app.use('/', routes);
//...
您应该在 app.js 之外定义您的模型,在每个单独模型的单独文件中,然后导出您可以 require
在不同的地方你需要它。您的模型定义实际上不需要在 db.once('open'
内
例如:如果你有一个模型 User 你应该在它自己的文件中这样定义它:
db/user.js
var mongoose = require('mongoose');
var schema = mongoose.Schema({
…
});
var model = mongoose.model('user', schema);
module.exports = model;
如果你想在 routes/index.js 中使用用户模型:
…
var User = require('../db/user');
router.get('/user/:id', function(req, res, next) {
User.findById(req.params.id, function(err, user){
res.render('user', { title: 'Express', user: user});
});
});
express 生成器创建了一个这样的应用程序: 主要 app.js:
var app = express();
//...
var routes = require('./routes/index');
app.use('/', routes);
//...
在routes/index.js
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
在 index.js 中使用我在 app.js 中定义的变量的最佳方法是什么? 例如,在定义路由之前,我设置了猫鼬模型:
var myModel;
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.once('open', function (callback) {
//load schemas
var dbSchema = require('./schema');
myModel = mongoose.model('mymodel', dbSchema.myModel);
});
如何在路由模块中使用 'myModel'?
当您在 app.js 文件中需要路由器时,将其作为参数传递。您将不得不稍微修改 index.js 文件
var express = require('express');
var myRouter = function(myModel) {
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
// You can use your myModel model here
return router;
}
module.exports = myRouter
现在在你的app.js
里面var app = express();
//...
// Pass myModel as a parameter
var routes = require('./routes/index')(myModel);
app.use('/', routes);
//...
您应该在 app.js 之外定义您的模型,在每个单独模型的单独文件中,然后导出您可以 require
在不同的地方你需要它。您的模型定义实际上不需要在 db.once('open'
例如:如果你有一个模型 User 你应该在它自己的文件中这样定义它:
db/user.js
var mongoose = require('mongoose');
var schema = mongoose.Schema({
…
});
var model = mongoose.model('user', schema);
module.exports = model;
如果你想在 routes/index.js 中使用用户模型:
…
var User = require('../db/user');
router.get('/user/:id', function(req, res, next) {
User.findById(req.params.id, function(err, user){
res.render('user', { title: 'Express', user: user});
});
});