快线功能未吊装

Express route functions not hoisted

有人可以向我解释一下为什么我的 Express 路线没有挂起吗?我经常看到抛出以下错误:

throw new TypeError('Router.use() requires middleware functions');

以下文件不会产生错误:

var express        = require('express'),
    router         = express.Router()

var loadWidget = function (req, res, next) {

    req.widget = { text: 'Widget' };

    return next();
};

var sendWidget = function (req, res, next) {

    return res.status(200).send(req.widget);
};

router.use(loadWidget);

router.get('/', sendWidget);

module.exports = router;

但是,改变方法的顺序,如下面的文件,确实抛出错误:

var express        = require('express'),
    router         = express.Router()

router.use(loadWidget);

router.get('/', sendWidget);

var loadWidget = function (req, res, next) {

    req.widget = { text: 'Widget' };

    return next();
};

var sendWidget = function (req, res, next) {

    return res.status(200).send(req.widget);
};

module.exports = router;

我希望我的文件包含文件头部的操作(usegetpost 等)以及函数的实际主体下面。

附带说明一下,当我第一次调用该应用程序时会抛出错误。使用 nodemon 发送 rs 不会抛出错误:

导致错误:

NODE_APP='app01' nodemon ./server/server

没有错误:

rs

函数声明在 javascript 中被提升,但函数表达式没有。函数表达式为:

var fn = function() {};

和函数声明:

function fn() {};