RUE*_*INE 3 middleware node.js express
当我的应用程序启动时,会创建一个对象,该对象在整个应用程序中的多个文件中使用。在我的 app.js 文件中,我需要几个包含我的路由的文件。这些路由需要访问在 app.js 中创建的对象,所以我试图将它传递给这些文件中的每一个。下面是其中一个文件的示例。
测试.js
const express = require('express');
const router = express.Router();
router.use('/api', router);
router.post('/testRoute', (req, res, next) => {
if(globalVariable.abc) { //globalVariable is the variable created in app.js
//do some logic
}
res.json({
message: "Test Route Success"
})
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
应用程序.js
const assessmentRoutes = require('./routes/test');
app.use(assessmentRoutes);
Run Code Online (Sandbox Code Playgroud)
我试图让变量传入的一种方法是将 test.js 中的路由包装在一个函数中,该函数采用这样的变量。
module.exports = function(globalVariable) {
router.post('/testRoute', (req, res, next) => {
if(globalVariable.abc) { //globalVariable is the variable created in app.js
//do some logic
}
res.json({
message: "Test Route Success"
})
});
}
Run Code Online (Sandbox Code Playgroud)
然后在 app.js 中 require 更改为:
const assessmentRoutes = require('./routes/assessments')(globalVariable);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我会在启动应用程序时遇到错误,例如 app.use() 需要一个中间件功能。
如何将对象传递到我的路线中?
app.js
const assessmentRoutes = require('./routes/test');
global.globalVariable = { abc: ... };
app.use(assessmentRoutes);
Run Code Online (Sandbox Code Playgroud)
test.js
const express = require('express');
const router = express.Router();
router.post('/testRoute', (req, res, next) => {
if (globalVariable.abc) { ... }
res.json({
message: 'Test Route Success',
});
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
另一种方法是导出一个函数,您可以在其中将其作为参数传入,就像您所做的那样。问题是你没有从那个函数返回路由器,你以后需要在app.js:
app.js
const assessmentRoutes = require('./routes/test');
app.use(assessmentRoutes({ abc: ... }));
Run Code Online (Sandbox Code Playgroud)
test.js
const express = require('express');
const router = express.Router();
module.exports = function(globalVariable) {
router.post('/testRoute', (req, res, next) => {
if (globalVariable.abc) { ... }
res.json({
message: 'Test Route Success',
});
});
// This is what you were missing in your code!
return router;
};
Run Code Online (Sandbox Code Playgroud)
一个类似的选择是导出router对象以及一个 setter 函数来初始化globalVariable内部test.js:
app.js
const { assessmentRoutes, initAssessmentRoutes } = require('./routes/test');
initAssessmentRoutes({ abc: ... });
app.use(assessmentRoutes);
Run Code Online (Sandbox Code Playgroud)
test.js
const express = require('express');
const router = express.Router();
let globalVariable = { abc: null };
function initAssessmentRoutes(options) {
globalVariable = options;
}
router.post('/testRoute', (req, res, next) => {
if (globalVariable.abc) { ... }
res.json({
message: 'Test Route Success',
});
});
module.exports = {
assessmentRoutes: router,
initAssessmentRoutes,
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3402 次 |
| 最近记录: |