簡體   English   中英

無法導入我的路線模塊

[英]Cannot import my routes module

當我嘗試使用app.use(require(./routes))將routes模塊導入主應用程序時,我得到了app.use() requires middleware functions 我應該如何處理module.exports函數以使其工作?

我的路線:

var express = require('express'),
    auth = require('../middleware/auth.js'),
    user = require('../models/user.js'),
    formidable = require('formidable');

module.exports = (function () {
    app.post('/', function (req, res) {
        var form = new formidable.IncomingForm();
        form.parse(req, function (err, fields, files) {
            user.create(fields.username, fields.email, fields.password);
        });
        res.render('./game/game.html', {});
    });

    app.get('/', function (req, res) {
        res.render('./index.html', {});
    });

    app.get('/game', function (req, res) {
        res.render('/views/index.html');
    });
})();

我的主要app.js:

var express = require('express'),
    app = require('express')(),
    cookieSession = require('cookie-session'),
    ejs = require('ejs'),
    path = require('path'),
    cookieParser = require('cookie-parser'),
    util = require('util'),
    port = process.env.PORT || 3000,
    auth = require('./middleware/auth.js'),
    user = require('./models/user.js'),
    formidable = require('formidable');
    router = express.Router();

app.use(express.static(path.join(__dirname, 'public')));
app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

//won't import routes
app.use(require('./routes'));

module.exports = router;

app.listen(port);

您需要在導出功能中返回應用程序

module.exports = function (express) {
  var app  = express.Router();
  app.post('/', function (req, res) {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        user.create(fields.username, fields.email, fields.password);
    });
    res.render('./game/game.html', {});
});

app.get('/', function (req, res) {
    res.render('./index.html', {});
});

app.get('/game', function (req, res) {
    res.render('/views/index.html');
});

 return app

};

......

app.use(require('./routes')(express));

您的路由必須是Express Router的實例。

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

router.get('/', function(req, res, next) {
    res.send(req.headers);
});

module.exports = router;

現在在您的app.js您可以按以下方式使用它們:

app.use('/', require('./routes/index'));

您的模塊應該更改您的路由器( app ),或者創建自己的路由器並導出它。

解決方案1

模組

module.exports = function(app) {
  app.post(...);
  app.get(...);
}

主應用

require("./routes")(app)

解決方案2

模組

var app = express.Router();
app.post(...);
app.get(...);
module.exports = app;

主應用

app.use(require("./routes"))

我認為解決方案2更好,因為它避免了突變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM