I am trying to separate multiple routes and their handler logic in Express in separate files. I saw examples of directory structures, for example, in the JS tool, where separate route and controller files are used, so I'm trying to implement this approach, but I find a problem.
My server and routes are configured like this:
server.js
var express = require('express'),
app = express(),
bodyParser = require('body-parser'),
routes = require('./routes/index')
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
routes(app);
/routes/index.js
module.exports = function(app) {
var catalogues = require('../routes/catalogues');
app.use('/catalogues-api', catalogues);
};
/routes/catalogues.js
var catalogues = require('../controllers/catalogues');
module.exports = function(app) {
app.route('/catalogues')
.get(catalogues.apiGET)
.post(catalogues.apiPOST);
};
/controllers/catalogues.js
var request = require('request');
exports.apiGET = function(req, res) {
var options = prepareCataloguesAPIHeaders(req);
request(options, function(err, response, body){
res.send(body);
});
};
exports.apiPOST = function(req, res) {
var options = prepareCataloguesAPIHeaders(req);
options.json = true;
options.body = stripBody(req.body);
request(options, function(err, response, body){
res.send(body);
});
};
When I launch the application and get the GET request against / catalogs -api / catalogs, I get an error message from node:
TypeError: undefined is not a function on module.exports (C: \ Users \ rparker \ Documents \ GitHub \ testproj \ src \ server \ routes \ catalogues.js: 4: 7)
app.route /routes/catalogues.js. , , - , .
- ?