Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 不执行简单可配置的Express中间件_Node.js_Express - Fatal编程技术网

Node.js 不执行简单可配置的Express中间件

Node.js 不执行简单可配置的Express中间件,node.js,express,Node.js,Express,我试图在Express中构建一个(一个接受自定义参数的自定义中间件函数,并返回一个使用这些参数的(req,res,next)函数)。但是,我无法让这个中间件在路由器.get()调用上执行 下面代码中的预期行为是,当尝试获取主页(/)时,控制台会记录“success!”然后我得到一个404(因为中间件中的next()将把我传递给404函数) 但是,什么也没有发生,请求超时。当我将console.log()放在中间件中时,正在检测函数,但就在返回函数(req,res,next){行之前,我在控制台上

我试图在Express中构建一个(一个接受自定义参数的自定义中间件函数,并返回一个使用这些参数的
(req,res,next)
函数)。但是,我无法让这个中间件在
路由器.get()调用上执行

下面代码中的预期行为是,当尝试获取主页(/)时,控制台会记录“success!”然后我得到一个404(因为中间件中的
next()
将把我传递给404函数)

但是,什么也没有发生,请求超时。当我将
console.log()
放在中间件中时,正在检测函数,但就在
返回函数(req,res,next){
行之前,我在控制台上看到了输出。我只在可配置中间件返回函数时才会遇到此问题

/app.js(对Express生成的模板没有更改):

/routes/index.js

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

var simplemiddleware = require('../middlewares/simplemiddleware');

/* GET home page. */
router.get('/', function(req, res, next) {
  simplemiddleware.simpleReturn('success!');
});

module.exports = router;
exports.simpleReturn = function (outputString){
  return function (req,res,next) {
    console.log(outputString);
    next();
  }  
}
/middleware/simplemiddleware.js

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

var simplemiddleware = require('../middlewares/simplemiddleware');

/* GET home page. */
router.get('/', function(req, res, next) {
  simplemiddleware.simpleReturn('success!');
});

module.exports = router;
exports.simpleReturn = function (outputString){
  return function (req,res,next) {
    console.log(outputString);
    next();
  }  
}
请注意

var simplemiddleware = require('../middlewares/simplemiddleware');
实际上是一个
函数
,要解决此问题,请尝试以下操作

/routes/index.js:

var simplemiddleware = require('../middlewares/simplemiddleware');

/* GET home page. */
router.get('/', function(req, res, next) {

  // note `simplemiddleware.simpleReturn(str)` returns a function
  let func = simplemiddleware.simpleReturn('success!');

  // run the middleware
  func(req, res, next);
});

美丽,清晰的解释。永远谢谢你!