Nodejs 在路由里面怎么用到app里面的全局变量?

Nodejs 在路由里面怎么用到app里面的全局变量?

app.js

 path = require('path');
 user = require('./routes/user')
app.post('/job', user.postarticle);

routers\user.js

exports.postarticle=function(req,res){

 这里怎么用path ?

除了重新require一次path


4 回复

要在Node.js中将app.js中的全局变量传递给路由文件(如routers/user.js),可以通过几种不同的方式来实现。以下是其中一种常用的方法,即通过模块导出一个函数来接收app实例,从而可以在路由处理程序中使用全局变量。

示例代码

app.js

const express = require('express');
const path = require('path');
const userRouter = require('./routers/user');

const app = express();

// 假设这是你的全局变量
app.set('globalPath', path);

// 将app实例传递给路由
app.use('/job', userRouter(app));

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

routers/user.js

module.exports = function(app) {
    const path = app.get('globalPath');

    return (req, res) => {
        // 现在你可以使用全局的 `path` 变量了
        console.log(path); 

        // 处理POST请求的逻辑
        res.send('Article posted!');
    };
};

解释

  1. app.js 中,我们首先定义了一个全局变量 globalPath 并将其设置为 path 模块。然后,我们将这个模块导出给用户路由处理程序。这通过将路由注册部分稍微修改实现,即app.use('/job', userRouter(app));

  2. routers/user.js 中,我们定义了一个函数,该函数接受 app 实例作为参数,并从中获取全局变量 globalPath。这样,你就可以在路由处理程序中使用这个全局变量了。

这种方法避免了在每个路由文件中重复导入相同的模块,同时保持了代码的清晰性和可维护性。


这样可以吗?app.js

app.use(user(path));

user.js

module.exprots = function(path){
//do it
};

req,resp 呢

要在Node.js中在一个路由文件中使用在app.js中定义的全局变量,可以通过将这些全局变量作为参数传递给路由处理函数。以下是一个具体的示例,展示了如何在路由文件中使用app.js中的全局变量。

app.js

const express = require('express');
const path = require('path');
const userRouter = require('./routers/user');

const app = express();

// 定义一个全局变量
const globalVar = "这是一个全局变量";

// 使用路由时传递全局变量
app.post('/job', (req, res) => {
    userRouter.postarticle(req, res, globalVar);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

routers/user.js

module.exports.postarticle = function(req, res, globalVar) {
    // 现在你可以直接使用全局变量
    console.log(globalVar);

    // 处理你的请求逻辑
    res.send("成功接收到POST请求,并且全局变量已传递");
};

在这个例子中,我们首先在app.js中定义了一个全局变量globalVar。然后,在处理/job路径的POST请求时,我们将这个全局变量作为额外的参数传递给userRouter.postarticle函数。这样,你就可以在路由文件user.js中的postarticle函数中使用这个全局变量了。

这种方法避免了重复require同一个模块,同时也允许你在路由处理函数中访问应用级别的全局变量。注意,传递全局变量的方式取决于具体的应用场景和需求。如果你有很多全局变量需要传递,可以考虑使用其他方法,如将这些变量封装到一个对象中,然后作为一个整体传递。

回到顶部