在我向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
答案 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
是您的字段名称。
并检查您是否导出路由器。