如何将数据从get函数获取到node.js的同一js文件中的另一个函数?

时间:2019-05-08 22:19:55

标签: javascript node.js

我想从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
});

任何帮助将不胜感激。

1 个答案:

答案 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