【问题标题】:Node Express MiddlewareNode Express 中间件
【发布时间】:2016-10-08 11:52:23
【问题描述】:

我目前正在编写一个 express 应用程序并想使用我编写的一些自定义中间件,但是 express 一直抛出一个问题。

我有一个es6 类,它有一个接受正确参数的方法,如下所示:

foo(req, res, next){
   console.log('here');
}

然后在我的应用程序中,我告诉 express 像这样使用它:

const module = require('moduleName');
...
app.use(module.foo);

但是 express 一直抛出这个错误:

app.use() requires middleware functions

任何帮助将不胜感激。

【问题讨论】:

  • foo(req, res, next){ console.log('here'); } ?

标签: javascript node.js express middleware


【解决方案1】:

这个错误总是出现TypeError: app.use() requires middleware functions

由于您没有导出该功能,所以它无法访问

尝试像这样从文件中导出它

exports.foo=function(req, res, next){
   console.log('here');
   next();
}

你也可以使用module.exports

module.exports={
  foo:function(req,res,next){
    next();
  }
}

【讨论】:

  • 这可行,但后来我无法访问类方法。有没有办法将类方法用作中间件?
  • 你可以看看这里如何访问类方法stackoverflow.com/questions/11782453/class-methods-in-node-js
  • 类代码与此类似,(抱歉无法显示确切的代码,因为它是针对客户端应用程序的)。 pastebin.com/dTdseg3L 其中 bar 是我想用作中间件的方法
  • 在看到你的代码之前,没人能猜出你到底发生了什么
【解决方案2】:

解决方案有两个部分。首先使中间件函数成为您从模块中导出的该类的静态方法。此函数需要获取您的类的一个实例,并将调用您需要的任何方法。

"use strict";

class Middle {
  constructor(message) {
    this._message = message;
  }

  static middleware(middle) {

    return function middleHandler(req, res, next) {
      // this code is invoked on every request to the app

      // start request processing and perhaps stop now.
      middle.onStart(req, res);

      // let the next middleware process the request
      next();
    };
  }

  // instance methods
  onStart(req, res) {
    console.log("Middleware was given this data on construction ", this._message);
  }
}

module.exports = Middle;

然后在您的节点 JS / express 应用服务器中,在需要模块后,创建您的类的实例。然后将此实例传递给中间件函数。

var Middle = require('./middle');
var middle = new Middle("Sample data for middle to use");
app.use(Middle.middleware(middle));

现在,在每次请求时,您的中间件都可以访问类数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 2013-08-13
    • 1970-01-01
    • 2017-05-14
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多