shushanfx
								2015-06-04 14:34:14
							
							
								原
							nodejs+express4+jade快速搭建http服务
一, 概述
通过express搭建http服务。
1. express4
× express
× serve-favicon 处理favicon
× morgan 日志系统
× method-override 处理PUT/DELETE请求,目前没有用到
× express-session 处理session
× body-parser 处理post提交的body。
× multer 处理文件上传。
× errorhandler 错误处理
2. jade 模板引擎
3. easyui 前端架构
二, 功能:
1. 登录页面
2. 登录校验,校验是否登录,如果登录将用户信息保存至session。
3. 主页,使用easyui layout布局。
三, 代码分析:
1. server.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var methodOverride = require('method-override');
var session = require('express-session');
var bodyParser = require('body-parser');
var multer = require('multer');
var errorHandler = require('errorhandler');
// self define js library
var router = require("./server/router.js");
var app = express();
// all environments
app.set('port', process.env.PORT || 18080);
app.set('views', path.join(__dirname, 'jade'));
app.set('view engine', 'jade');
app.use(favicon(path.join(__dirname, 'static/favicon.ico')));
app.use(logger('dev'));
app.use(methodOverride());
app.use(session({ resave: true,
                  saveUninitialized: true,
                  secret: 'uwotm8' }));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(multer());
app.use(express.static(path.join(__dirname, 'static'))); //静态页面地址
// development only
if ('development' == app.get('env')) {
  app.use(errorHandler());
}
// 注册url以及url handler
router.register(app);
app.listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});
2. router.js path注册页面
var url = require("url");
var merge = require("merge");
var router = {};
var serverConfig = require("../server.json");
// 指示是否启动登录校验。
var VALIDATE_LOGIN = true;
/**
 * string-function|object
 * function: see object handler
 * object {
 *      type: html(default) | json,
 *      method: get(default) | post
 *      handler: function(req, res)
 * }
 * @type {{/: indexController, /index.html: indexController, detail.html: {handler: detailController}}}
 */
var htmlPath = {
    "/": indexController,
    "/index.html": indexController,
    "/list.html" : listController
};
var codePath = {
    "NOT_LOGIN" : {
        code: -100,
        message: "当前用户未登录!"
    },
    "FAIL": {
        code: -1,
        message: "操作失败!"
    },
    "SUCCESS" : {
        code: 1,
        message: "操作成功!"
    },
    "LOGIN_SUCCESS" : {
        code: 100,
        message: "登录成功!"
    }
};
router.register = function(app){
    app.use(function(req, res, next){
        if(!VALIDATE_LOGIN){
            next();
        }
        else{
            var type = isIntercept(req);
            if(type == "json"){
                res.json(codePath["NOT_LOGIN"]);
            }
            else if(type=="html"){
                res.redirect("/login.html?url=" + encodeURIComponent(req.url))
            }
            else{
                next();
            }
        }
    });
    var key, value;
	for(key in htmlPath){
        value = htmlPath[key];
        if(typeof(value)=="function"){
            app.get(key, value);
        }
        else if(typeof(value)=="object" && typeof(value.handler)){
            if(value.method=="post"){
                app.post(key, value.handler);
            }
            else{
                app.get(key, value.handler);
            }
        }
    }
    app.get("/login.html", login1);
    app.post("/doLogin.html", login2);
};
function indexController(req, res){
    res.render("index", getServerConfig());
}
function listController(req, res){
    var obj = {message: req.param("message")};
    res.render("list", getServerConfig(obj));
}
function login1(req, res){
    res.render("login", getServerConfig());
}
function login2(req, res){
    var username = "", password = "";
    var ret = "";
    var obj = {};
    if(req.body){
        username = req.body.username;
        password = req.body.password;
        if(req.session){
            req.session.username = username;
            req.session.password = password;
        }
    }
    if(username && password){
        if(req.session){
            req.session.uid = username;
        }
        res.json(codePath["LOGIN_SUCCESS"])    
    }
    else{
        res.json(codePath["FAIL"]);
    }
}
function isIntercept(req){
    var pp = url.parse(req.url).pathname;
    var value = htmlPath[pp];
    if(value){
        if(req.session && req.session.uid){
            return "";
        }
        if(typeof(value)=="function"){
            return "html";
        }
        else if(typeof(value)=="object"){
            return value.type || "html";
        }
    }
    return "";
}
function getServerConfig(obj){
    return merge({}, {server: serverConfig}, obj);
}
module.exports = router;
四, 截图
猜你喜欢
- linux环境下搭建NodeJS教程并带有Hello World测试程序
 - Node.js的CRUD app,使用AJAX/Express/Jade/MySQL/JSON/HTML5/CSS3
 - node js+mongodb整合开发简单增删改查实例,适合nodejs初学者学习
 - electron构建一个桌面应用程序,实现文件下载
 - nodejs实现从mysql数据库中导出excel报表,支持按日期导出
 - nodejs开发的用户管理系统nodeCRM---适合Node.js新手
 - redis+nodejs的数据获取
 - nodejs推送push mysql数据更新到前端显示
 - nodejs开发在线聊天webchat系统源码分享
 - nodejs基于excel.js实现超轻量级报表
 - Nodejs图片偷盗者--简易版爬虫系统
 - nodejs爬百度糯米数据,拿去就能用,ide是webstorm+Mysql
 
请下载代码后再发表评论
    
											  
													 文件名:server.zip,文件大小:5077.31K
											  
											  
												  下载
											  
											  
											  
												
										  
								- /
- /server
- /server/jade
- /server/jade/includes
- /server/jade/includes/head.jade
 - /server/jade/includes/layout.jade
 - /server/jade/includes/page.jade
 
 - /server/jade/index.jade
 - /server/jade/list.jade
 - /server/jade/login.jade
 
 - /server/jade/includes
 - /server/node_modules
 
 - /server/jade
 
 - /server
 
相关代码
				- linux环境下搭建NodeJS教程并带有Hello World测试程序
 - 原证 electron构建一个桌面应用程序,实现文件下载
 - 原 nodejs实现从mysql数据库中导出excel报表,支持按日期导出
 - 精 nodejs开发的用户管理系统nodeCRM---适合Node.js新手
 - 原 redis+nodejs的数据获取
 - 原精 Node.js的CRUD app,使用AJAX/Express/Jade/MySQL/JSON/HTML5/CSS3
 - 原精 nodejs推送push mysql数据更新到前端显示
 - nodejs开发在线聊天webchat系统源码分享
 - 原证 nodejs基于excel.js实现超轻量级报表
 - Nodejs图片偷盗者--简易版爬虫系统
 - 原 node js+mongodb整合开发简单增删改查实例,适合nodejs初学者学习
 - 原 nodejs爬百度糯米数据,拿去就能用,ide是webstorm+Mysql
 
最近下载
				
                chenranr     LV10
                2024年6月21日
            
            
        
                lll111     LV16
                2020年5月26日
            
            
        
                嘿呀嘿呀123     LV12
                2019年5月12日
            
            
        
                jiangbb868     LV13
                2018年1月30日
            
            
        
                wujinhong     LV1
                2017年10月20日
            
            
        
                depodt     LV1
                2017年9月29日
            
            
        
                savagekingn     LV8
                2017年5月2日
            
            
        
                ycb159856     LV12
                2017年4月11日
            
            
        
                特有的温柔带点涩i     LV6
                2017年4月1日
            
            
        
                zhuqimin     LV4
                2017年3月27日
            
            
        
最近浏览
				
                penumbra122    
                2024年7月20日
            
            
                    暂无贡献等级
            
        
                chenranr     LV10
                2024年6月21日
            
            
        
                马朝坤    
                2024年3月29日
            
            
                    暂无贡献等级
            
        
                武浅静     LV1
                2023年10月26日
            
            
        
                微信网友_6535005127970816    
                2023年6月25日
            
            
                    暂无贡献等级
            
        
                uni-code_0123     LV1
                2023年4月25日
            
            
        
                fewfsdaf     LV4
                2023年4月16日
            
            
        
                逆袭 奋起     LV4
                2023年1月30日
            
            
        
                13756914218    
                2022年12月12日
            
            
                    暂无贡献等级
            
        
                2799901305    
                2022年11月24日
            
            
                    暂无贡献等级
            
        



                
                
    