Router.use()需要中间件函数但得到了一个对象

时间:2017-01-03 16:06:37

标签: express router

在我向Express程序员添加路由后,我收到错误(见下文):

/app/node_modules/express/lib/router/index.js:458
2017-01-03T15:53:48.842543+00:00 app[web.1]:       throw new TypeError('Router.use() requires middleware function but got a ' + gettype(fn));
2017-01-03T15:53:48.842545+00:00 app[web.1]:       ^
2017-01-03T15:53:48.842545+00:00 app[web.1]: 
2017-01-03T15:53:48.842546+00:00 app[web.1]: TypeError: Router.use() requires middleware function but got a Object
2017-01-03T15:53:48.842547+00:00 app[web.1]:     at Function.use (/app/node_modules/express/lib/router/index.js:458:13)
2017-01-03T15:53:48.842548+00:00 app[web.1]:     at EventEmitter.<anonymous> (/app/node_modules/express/lib/application.js:219:21)
2017-01-03T15:53:48.842549+00:00 app[web.1]:     at Array.forEach (native)
2017-01-03T15:53:48.842549+00:00 app[web.1]:     at EventEmitter.use (/app/node_modules/express/lib/application.js:216:7)
2017-01-03T15:53:48.842550+00:00 app[web.1]:     at module.exports (/app/server/routes/index.js:16:9)
2017-01-03T15:53:48.842551+00:00 app[web.1]:     at Object.<anonymous> (/app/server.js:59:27)
2017-01-03T15:53:48.842551+00:00 app[web.1]:     at Module._compile (module.js:556:32)
2017-01-03T15:53:48.842552+00:00 app[web.1]:     at Object.Module._extensions..js (module.js:565:10)
2017-01-03T15:53:48.842553+00:00 app[web.1]:     at Module.load (module.js:473:32)
2017-01-03T15:53:48.842553+00:00 app[web.1]:     at tryModuleLoad (module.js:432:12)
2017-01-03T15:53:48.842554+00:00 app[web.1]:     at Function.Module._load (module.js:424:3)
2017-01-03T15:53:48.842554+00:00 app[web.1]:     at Module.runMain (module.js:590:10)
2017-01-03T15:53:48.842555+00:00 app[web.1]:     at run (bootstrap_node.js:394:7)
2017-01-03T15:53:48.842556+00:00 app[web.1]:     at startup (bootstrap_node.js:149:9)
2017-01-03T15:53:48.842556+00:00 app[web.1]:     at bootstrap_node.js:509:3

这是我用于路由的index.js(只是其中的一部分):

module.exports = function(app) {
...
    app.use('/api/elasticsearch', require('../elasticsearch'));
...

这里是index.js文件夹&#34; elasticsearch&#34;:

var express = require('express');
var controller = require('./elasticsearch.controller');
var router = express.Router();

router.post('/index', controller.writeIndex);

module.exports = router;

这是&#34; writeIndex&#34;的开始。在控制器内的功能,我也没有看到任何错误:

exports.writeIndex = function (req, res) {
..
}
function indexData(technicians,indexName, typeName) {
..
}
..

我正在使用HEROKU,之前我没有任何问题。 我认为这里的主要错误是:

throw new TypeError('Router.use() requires middleware function but got a ' + gettype(fn));

但这是什么意思?

这是我项目的目录结构(只是其中一部分可读):

- server
-- elasticsearch
-- index.js
-- elasticsearch.controller.js
- routes
-- index.js
- api
-- coresystems
-- coresystems.controller.js
-- coresystemsAPI.js
-- index.js

3 个答案:

答案 0 :(得分:3)

在这里你需要纠正路径。

app.use('/api/elasticsearch', require('../elasticsearch/index.js'));

答案 1 :(得分:0)

我有同样的问题,因为我没有添加

module.exports = router; 

在我的routes / index.js底部,确保要导出为路由器

答案 2 :(得分:0)

import {body, validationResult} = require('express-validator');

因此,如果您使用 express-validator,请使用 body() 而不是 check()

示例:-

使用,

body('email').isEmail();

代替,

check('email').isEmail();

这里的 email 是您的字段名称。

并检查您是否导出路由器。