【问题标题】:Express route functions not hoisted快线功能未提升
【发布时间】:2016-05-16 13:37:04
【问题描述】:

有人可以向我解释为什么我的 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 node.js express nodemon


    【解决方案1】:

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

    var fn = function() {};
    

    和函数声明:

    function fn() {};
    

    【讨论】:

    • 我一直在使用函数表达式来帮助我识别异步方法和同步函数。我想我可能应该只附加“同步”并假设其他所有内容都是异步的。
    • @G.Deward "Sync" 后缀绝对是区分同步和异步功能的更好方法:-)
    猜你喜欢
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多