Node+expressJs登录验证 二
全部代码写在app.js是非常不明智的,而且以后难以维护,当代码越来越多时,app.js可能不只是那么几行,个文件代码行数和处理的事情越多会越难以维护,需要进行重构,首先是功能划分模块
3 min read
By
myfreax

全部代码写在app.js是非常不明智的,而且以后难以维护,当代码越来越多时,app.js可能不只是那么几行,一个文件代码行数和处理的事情越多会越难以维护,需要进行重构,首先是功能划分模块
数据层
在数据层面中加入Mongoose的模型支持,因为Mongoose模型可以很好帮助我们验证数据,对数据进行存储,以及在mongodb中存储,Mongoose还可以做很多事情,具体查看Mongoose
路由
路由是express核心组件,几乎所有web框架都会有路由组件,现在连前端框架也有路由,比如Angular,当程序越来越大时,路由也会越多,所以也要分离,并且进行分类,容易查找
中间件
中间件也是express核心概念,虽然这里只用到一个中间件,然而中间件会有很多,应为express处理请求-响应周期就是一系列中间件的调用,这个自然也会非常之多
配置信息
如果你不想到处翻你的代码,就必须要对它分离
应用目录结构
middleware 中间件
|--app app级别的中间件
|--errors 错误处理中间件
|--routes 路由中间件
|--third-party 第三方中间件
model
|--db mongoose 连接
|--model mongoose模型文件
....
route
|--路由文件
views
|--视图模板
.gitignore
app.js 应用入口
config.js 配置信息
gulpfile.js Gulp
package.json npm包管理
app.js
/**
* Created by huangyanxiong on 16-2-9.
*/
var express = require('express'),
app = express(),
cookieParser = require('cookie-parser'),
bodyParser = require('body-parser'),
session = require('express-session'),
redisStore = require('connect-redis')(session),
db = require('./model/db');
config = require('./config');
app.use(bodyParser());
app.use(cookieParser());
//session
app.use(session({
store: new redisStore({ host: 'localhost', port: 6379}),
secret: 'keyboard cat',
saveUninitialized: true,
resave: true
}));
//views
app.set('views', config.app.views);
//view
app.set('view engine', config.app.view_engine);
//layout
app.set('view options',{layout:false});
//应用程序中间件
app.use(require('./middleware/app/auth'));
//模块化的路由
//index路由
app.use(require('./route/index'));
//auth组路由
app.use(require('./route/auth'));
//监听端口
app.listen(3000, function () {
console.info('listen 3000');
});
mongose模型模块化
db.js
/**
* Created by huangyanxiong on 16-2-21.
*/
//加载Mongoose模块
var mongoose = require( 'mongoose'),
config = require('../config');
//数据库连接地址
var dbURI = config.mongodb.uri;
//创建数据库连接
mongoose.connect(dbURI);
// CONNECTION EVENTS
//监听连接事件
// 当连接成功时
mongoose.connection.on('connected', function () {
console.log('Mongoose default connection open to ' + dbURI);
});
// 如果连接失败
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
// 当连接断开时
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
// 如果node进程结束,关闭连接
process.on('SIGINT', function() {
mongoose.connection.close(function () {
console.log('Mongoose default connection disconnected through app termination');
process.exit(0);
});
});
// 注册模型
require('./users');
users
/**
* Created by huangyanxiong on 16-2-21.
*/
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
first:'string',
last:'string',
email:{type:'string',unique:true},
password:{type:'string',index:true}
});
var User = module.exports = mongoose.model('User', userSchema);