我想从router.get()
函数中获取数据到位于同一JS文件中的另一个函数。
我已将数据发送到get方法:
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
现在我想在另一种方法中使用title
变量:
router.post('/', function(req, res) {
// I want to use the title variable in here
});
任何帮助将不胜感激。
答案 0 :(得分:0)
您只需要更改变量的范围。扩大变量范围时要小心。也就是说,您可以在路由器回调之外设置标题,然后在内部引用它。而且,随着您的Web应用程序的发展,您可能会有许多不同的页面,每个页面都有自己的页面标题。
完成这项工作的简单方法是在路由处理程序之外初始化标题:
// Here, I'm using Object.freeze, assuming you want the map to be
// immutable (i.e., not accidentally changed by other parts of the code)
// (const titles = { ... } won't achieve it)
let titles = Object.freeze({ /* Formatted as a "route" --> "title" map */
index: 'Express'
});
router.get('/', function(req, res, next) {
const routeName = 'index'
res.render(routeName, { title: titles[routeName] });
});
router.post('/', function(req, res) {
const routeName = 'index'
// Access your title here:
console.log(titles[routeName]);
});
作为替代方案,expressJS允许我们使用app.get()
和app.set()
方法。通常,大多数expressJS应用都是这样开始的:
let app = express();
您可以像这样存储与应用程序关联的变量:
app.set('indexTitle', 'Express');
这样,在路由处理程序中,您可以像这样访问:
router.get('/', function(req, res, next) {
res.render(routeName, { title: app.get('indexTitle') });
});
router.post('/', function(req, res) {
// Access your title here:
console.log(app.get('indexTitle'));
});
但是,更简单的方法可能是让前端跟踪所有页面标题,并且如果标题绝对是后端所需的东西,则前端只需将其发布在{ {1}}。是的,可能有些过分,但这将消除服务器跟踪它的需要:
req.body