I'm creating an app using Node and Express. However, I can see it'll soon become difficult to manage all the routes that are placed inside app.js
. I have placed all my models in a subdirectory /models
.
Here's my app current structure:
app.js models -- products -- customers -- ... public views node_modules
In app.js
:
var express = require('express'), routes = require('./routes'), user = require('./routes/user'), http = require('http'), path = require('path'), EmployeeProvider = require('./models/employeeprovider').EmployeeProvider, Products = require('./models/products').Products, Orders = require('./models/orders').Orders, Customers = require('./models/customers').Customers, checkAuth = function(req, res, next) { if (!req.session.user_id) { res.send('You are not authorized to view this page'); } else { next(); } }; var app = express();
Then some configuration like port
, views
directory, rendering engine, etc.
Further down app.js
I've got the routes:
app.get('/product/edit', auth, function(req, res) { Products.findAll(function(error, prds) { res.render('product_edit', { title: 'New Product', products: prds }); }); });
At the top I'm assigning the contents of models/products.js
to a variable, all works fine. However keeping all routes inside app.js
is not ideal. But if I move the routes to routes/product.js
and load the Products
models:
var prod = require('../models/products.js');
I get an error saying that object has no method findAll
.
What am I doing wrong? How can I remove the routes from app.js
?
Faster testing execution. Getting wider coverage metrics of the code. Allows deploying the same API under flexible and different network conditions. Better separation of concerns and cleaner code.
Answer: A is the correct option. By using app. route() method, we can create chainable route handlers for a route path in Express.
Routing refers to how an application's endpoints (URIs) respond to client requests.
As of express 4.x Router
is added to support your case.
A router object is an isolated instance of middleware and routes. You can think of it as a “mini-application,” capable only of performing middleware and routing functions. Every Express application has a built-in app router.
Example from expressjs site:
// routes/calendarRouter.js var express = require('express'); var router = express.Router(); // invoked for any requested passed to this router router.use(function(req, res, next) { // .. some logic here .. like any other middleware next(); }); // will handle any request that ends in /events // depends on where the router is "use()'d" router.get('/events', function(req, res, next) { // .. }); module.exports = router;
Then in app.js:
// skipping part that sets up app var calendarRouter = require('./routes/calendarRouter'); // only requests to /calendar/* will be sent to our "router" app.use('/calendar', calendarRouter); // rest of logic
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With