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+mongodb整合开发简单增删改查实例,适合nodejs初学者学习
- NodeJS上传图片文件实例代码下载,支持多图片文件上传
- dubbo+zookeeper+spring boot+mybatis配置搭建分布式架构项目实例,一个服务消费,两个服务提供,负载均衡
- Nodejs图片偷盗者--简易版爬虫系统
- nodejs基于excel.js实现超轻量级报表
- SpringCloud微服务的项目架构搭建及Springboot应用实例
- nodejs开发的用户管理系统nodeCRM---适合Node.js新手
- nodejs推送push mysql数据更新到前端显示
- nodejs开发在线聊天webchat系统源码分享
- springcloud微服务架构项目搭建实例,基于maven多模块搭建
- nodejs实现从mysql数据库中导出excel报表,支持按日期导出
请下载代码后再发表评论
文件名: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测试程序
- 精 nodejs开发的用户管理系统nodeCRM---适合Node.js新手
- Nodejs图片偷盗者--简易版爬虫系统
- 原证 nodejs基于excel.js实现超轻量级报表
- 原 nodejs实现从mysql数据库中导出excel报表,支持按日期导出
- 原精 nodejs推送push mysql数据更新到前端显示
- nodejs开发在线聊天webchat系统源码分享
- 原 nodejs爬百度糯米数据,拿去就能用,ide是webstorm+Mysql
- 原 node js+mongodb整合开发简单增删改查实例,适合nodejs初学者学习
- NodeJS上传图片文件实例代码下载,支持多图片文件上传
- 原 nodejs抓取大众点评网站数据,mysql+webstorm复制粘贴就能用
- 原证 electron构建一个桌面应用程序,实现文件下载
最近下载
chenranr LV10
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
7月20日
暂无贡献等级
chenranr LV10
6月21日
马朝坤
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日
暂无贡献等级