Reputation: 565
When I try to import my routes module into the main app with app.use(require(./routes))
I get app.use() requires middleware functions
. How should I go about the module.exports
function to make it work?
My routes:
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');
});
})();
My main 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);
Upvotes: 1
Views: 411
Reputation: 2260
Your module should either mutate your router (app
), or create its own router and export it.
Module
module.exports = function(app) {
app.post(...);
app.get(...);
}
Main app
require("./routes")(app)
Module
var app = express.Router();
app.post(...);
app.get(...);
module.exports = app;
Main app
app.use(require("./routes"))
Solution 2 is better in my opinion because it avoids mutation.
Upvotes: 1
Reputation: 3895
Your routes need to be an instance of Express Router.
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.send(req.headers);
});
module.exports = router;
Now in your app.js
you can use them as following:
app.use('/', require('./routes/index'));
Upvotes: 1
Reputation: 6939
You need to return app in your exports function
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));
Upvotes: 2