Express错误 - TypeError:Router.use()需要中间件函数但是有一个Object [英] Express error - TypeError: Router.use() requires middleware function but got a Object

查看:235
本文介绍了Express错误 - TypeError:Router.use()需要中间件函数但是有一个Object的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我运行npm start运行我的快速应用程序时,我收到此错误。

I am getting this error when I run npm start to run my express app.

TypeError: Router.use() requires middleware function but got a Object

我的 app.js 代码

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);



/// catch 404 and forwarding to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

/// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

module.exports = app;

我的 index.js 代码

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

/* GET home page. */
router.get('/', function(req, res) {
    res.render('index', { title: 'Express' });
});

/* GET Hello World page. */
router.get('/helloworld', function(req, res) {
    res.render('helloworld', { title: 'Hello, World!' })
});

module.exports = router;

我是使用Node和express的新手。我不知道我哪里出错了。有人能看出我的问题是什么吗?

I am quirte new to using Node and express. I cant see where I have gone wrong. Can anybody see what my problem is?

推荐答案

我在 Kop4lyf


检查你的users.js。它也应该像
index.js那样导出路由器,如果你可以尝试的话。

check your users.js. It should also be exporting the router like index.js, if you can try that.

但是,这个问题是我遇到这个问题时的热门搜索结果,所以我正在推广答案。

However, this question was my top search result when I ran into this issue, so I am promoting to an answer.

错误是因为您的某个路线模块未被导出 - 这意味着当Express尝试识别您的所有路线时,Express无法访问它。

The error is caused because one of your route modules is not being exported - meaning Express does not have access to it when it tries to identify all of your routes.

您可以通过添加<来解决此问题code> module.exports = router; 到每个路径文件的末尾。

You can fix this by adding module.exports = router; to the end of each of your route files.

示例:

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

router.get('/', function(req, res, next) {
     //Do whatever...
});

module.exports = router;

有关 module.exports 的更多信息可以是可在此问题官方Node.js文档

More information about module.exports can be found on this question or the offcial Node.js documentation.

这篇关于Express错误 - TypeError:Router.use()需要中间件函数但是有一个Object的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆