在 app.js 和路由 y node.js 之间共享一个对象

Posted

技术标签:

【中文标题】在 app.js 和路由 y node.js 之间共享一个对象【英文标题】:sharing an object between app.js and routes y node.js 【发布时间】:2017-10-04 08:00:22 【问题描述】:

这是我的 app.js

var express = require('express');

...

var model = require('./models/my_model');
var routes = require('./routes/index');

var app = express();

app.use('/', routes);

var middlewareBefore = function(req, res, next)

    my_model.getName(function(err, result)
        if(err)
            console.log(err);
            res.redirect('/error');
        else
            console.log(result);
            next();
        
    )


app.use(middlewareBefore);

...

module.exports = app;

这是我的 routes/index.js 文件

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) 
    res.render('login',  url: my_model.getUrl() );
);

module.exports = router();

我正在尝试从路由文件访问 my_model。我已经尝试过使用 app.locals、res、req、res.locals 和 app.use('/', routes)(my_model),正如在本页的不同问题上所见,但它们似乎都不起作用.. .不知道是不是express.Router()的使用造成了这个问题(注意在路由之前设置中间件并没有解决这个问题)

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点:

1.在middlewareBefore变量声明后使用app.use('/', routes);

2.或者直接在顶部var model = require('./models/my_model');的routes/index.js中声明my_model

并在 router.get() 中使用。

3.或更好地使用MVC架构。

【讨论】:

1.正如我在问题中所说,那没有用,2.这就是我实际上正在做的事情,但我想知道这是否就像创建一个新实例一样(所以如果我需要以前在应用程序中完成的事情,则需要在index 不会像调用不同的对象吗?)。 3. 请解释一下

以上是关于在 app.js 和路由 y node.js 之间共享一个对象的主要内容,如果未能解决你的问题,请参考以下文章

node.js的路由

jQuery 函数不适用于 node.js 中的 express.js 路由

初步掌握node的路由控制

在通过 VHOST 连接的 node.js 应用程序之间共享 404 页面

Node js 教程

Node.js项目目录介绍