Node+expressJs登录验证 二

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

3 min read
By myfreax
Node+expressJs登录验证 二

全部代码写在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);