如何使用NodeJS和Express从app.js中分离路由和模型 [英] How to separate the routes and models from app.js using NodeJS and Express
问题描述
app.js
内的所有路由。我把所有的模型放在子目录 / models
中。 这是我的应用程序当前结构:
app.js
模型
- 产品
- 客户
- .. 。
public
查看
node_modules
在 app.js
:
var express = require('express'),
routes = require('./ routes'),
user = require('./ routes / user'),
http = require('http'),
path = 'path'),
EmployeeProvider = require('./ models / employeeprovider')。EmployeeProvider,
产品= require('./ models / products')。产品,
订单= require ('./models/orders').Orders,
Customer = require('./ models / customers')。客户
checkAuth = function(req,res,next){
if(!req.session.user_id){
res.send('你无权查看此页面');
} else {
next();
}
};
var app = express();
然后一些配置,如 port
,视图
目录,渲染引擎等。
进一步向下 app.js
我有路线:
app.get('/ product / edit',auth,function(req, res){
Products.findAll(function(error,prds){
res.render('product_edit',{
title:'New Product',
products:prds
});
});
});
在顶部我分配了 models / products.js的内容
到一个变量,一切正常。但是,将所有路线保持在 app.js
之内并不理想。但是如果我将路线移动到 routes / product.js
并加载产品
型号:
var prod = require('../ models / products.js');
我收到一个错误,表示该对象没有方法 findAll
。
我做错了什么?如何从 app.js
中删除路线?
As的快递4.x 路由器
被添加以支持您的情况。
路由器对象是中间件和路由的孤立实例。您可以将其视为微型应用程序,只能执行中间件和路由功能。每个Express应用程序都有一个内置的应用路由器。
// routes / calendarRouter.js
var express = require('express');
var router = express.Router();
//为任何请求传递给该路由器
router.use(function(req,res,next){
// ..这里有一些逻辑..像任何其他中间件
next();
});
//将处理结束于/ events
//的任何请求取决于路由器在哪里use()d
router.get('/ events' ,function(req,res,next){
// ..
});
module.exports = router;
然后在app.js中:
//跳过部分设置app
var calendarRouter = require('./ routes / calendarRouter');
//只有/ calendar / *的请求将被发送到我们的路由器
app.use('/ calendar',calendarRouter);
//其余逻辑
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
?
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
这篇关于如何使用NodeJS和Express从app.js中分离路由和模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!