如何在页面刷新时执行NodeJS功能

时间:2017-05-09 13:58:39

标签: node.js express

我从一个例子中写了一个小的NodeJS应用程序。这是我的代码的一部分。

server.js:

var app = express();
var helper = require('./helpers.something.js');

helper.calculate(function(result) {
  app.set('something', result);
});

var router = express.Router();
var home = require(./controllers/home.js);

router.get('/', home.index);

home.js

exports.index = (function(req, res) {
  res.locals.calculations = req.app.get('something');
  res.render('home', {
    data: req.app.get('something');
  });
};

我现在要解决的问题是,只有在每次刷新页面时启动服务器而不是调用服务器时,才会调用helper.calculate函数。有人建议我如果我想在home.js和server.js文件中使用结果,每次刷新页面时如何调用helper.calculate,因为我在express.js文档中很丢失。

1 个答案:

答案 0 :(得分:1)

您可以创建一个中间件,每次访问此路由时都会运行该函数。

你可以改变这个:

helper.calculate(function(result) {
  app.set('something', result);
});

var router = express.Router();
var home = require(./controllers/home.js);

router.get('/', home.index);

这样的事情:

var router = express.Router();
var home = require(./controllers/home.js);

const calculate = (req, res, next) => {
  helper.calculate(function(result) {
    app.set('something', result);
  });
  next();
};

router.get('/', calculate, home.index);

OR:

var router = express.Router();
var home = require(./controllers/home.js);

const calculate = (req, res, next) => {
  helper.calculate(function(result) {
    app.set('something', result);
    next();
  });
};

router.get('/', calculate, home.index);

取决于您是否要等到helper.calculate()完成后再运行控制器。

另一种选择是将其添加到home.js中的控制器代码中,但我认为您不想这样做,因为您之后会使用app.set()app.get()一个另一个所以我想你想分开设置变量和使用它的行为。