简体   繁体   English

Express Js:Router.use()需要中间件功能

[英]Express Js: Router.use() Requires Middleware function

I am developing an application in Express Js. 我正在Express Js中开发应用程序。 When I try to run the application I get this error: 当我尝试运行应用程序时,出现此错误:

在此处输入图片说明

My app.js file is like this: 我的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();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});
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
    });
  });
}
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});
var server = app.listen(3000, function() {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
module.exports = router;

My index.js is like this: 我的index.js像这样:

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

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

router.get("/list", function (req, res, next) {
    Poll.find({}, 'question', function (error, polls) {
        res.json(polls);
    });
});

router.get("/poll", function (req, res, next) {
    var pollId = req.params.id;

    // Find the poll by its ID, use lean as we won't be changing it
    Poll.findById(pollId, '', {lean: true}, function (err, poll) {
        if (poll) {
            var userVoted = false,
                    userChoice,
                    totalVotes = 0;

            // Loop through poll choices to determine if user has voted
            // on this poll, and if so, what they selected
            for (c in poll.choices) {
                var choice = poll.choices[c];

                for (v in choice.votes) {
                    var vote = choice.votes[v];
                    totalVotes++;

                    if (vote.ip === (req.header('x-forwarded-for') || req.ip)) {
                        userVoted = true;
                        userChoice = {_id: choice._id, text: choice.text};
                    }
                }
            }

            // Attach info about user's past voting on this poll
            poll.userVoted = userVoted;
            poll.userChoice = userChoice;

            poll.totalVotes = totalVotes;

            res.json(poll);
        } else {
            res.json({error: true});
        }
    });
});

router.get("/create", function (req, res, next) {
    var reqBody = req.body,
            // Filter out choices with empty text
            choices = reqBody.choices.filter(function (v) {
                return v.text != '';
            }),
            // Build up poll object to save
            pollObj = {question: reqBody.question, choices: choices};

    // Create poll model from built up poll object
    var poll = new Poll(pollObj);

    // Save poll to DB
    poll.save(function (err, doc) {
        if (err || !doc) {
            throw 'Error';
        } else {
            res.json(doc);
        }
    });
});

module.exports = router;

And user.js is this: user.js是这样的:

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

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

module.exports = router;

I tried to find my solution on SO , but couldn't. 我试图在SO上找到我的解决方案,但找不到。 Feel free to tell me if i need to provide any other file. 随时告诉我是否需要提供其他文件。 Any help? 有什么帮助吗?

You should define routes in your index.js like you do in user.js . 您应该像在user.js一样在index.js定义路由。

app.use('/', routes) in your code expects routes to be an instance of a Router , but you're exporting an object with functions instead of that. app.use('/', routes)期望routesRouter的实例,但是您要导出的对象带有函数而不是函数。

So your index.js file should have the following structure: 因此,您的index.js文件应具有以下结构:

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

router.get("/", function (req, res) {
    res.render('index');
});

router.get("/list", function(req, res) {/*list implementation*/});

....

module.exports = router;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Express 路由器:Router.use() 需要中间件 function 但得到了 Object - Express router : Router.use() requires a middleware function but got a Object EXPRESS:Router.use() 需要一个中间件函数,但得到了一个对象 - EXPRESS: Router.use() requires a middleware function but got a Object express js中的Socket.io:Router.use需要中间件功能,但未定义 - Socket.io in express js : Router.use requires middleware function but got undefined 护照.js +快递:TypeError('Router.use()需要中间件功能,但得到了'+ gettype(fn)) - passport.js + express: TypeError('Router.use() requires a middleware function but got a ' + gettype(fn)) Router.use需要中间件功能,但有对象:node.js / express - Router.use requires middleware function but got object : node.js / express Router.use需要中间件功能吗? - Router.use requires middleware function? router.use()需要中间件功能错误 - router.use() requires middleware function error Express 路由器设置错误:Router.use() 需要中间件 function 但未定义 - Error On Express Router Setup: Router.use() requires middleware function but got a undefined Node.js / express-Router.use()需要中间件功能,但是得到了'+ gettype(fn)); - Nodejs/express - Router.use() requires middleware function but got a ' + gettype(fn)); Api : Express : throw new TypeError('Router.use() 需要一个中间件函数,但得到了一个 ' + gettype(fn)) - Api : Express : throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM