express + redis 构建基于node的开发环境
2016-01-24 19:43
417 查看
Node.js的性能毋庸置疑,基于Chrome的V8引擎,使用全异步化的处理方式,使得Node.js具有其他web框架无与伦比的性能优势。
异步化的开发模式虽然在性能上有很大的提升,但是个人觉得基于异步化的开发模式,会似的代码分散在各个模块中,对面向对象的封装性有着比较大的侵扰。当然也可能仅仅是个人的一点愚见。
言归正传,搭建基于express的web开发框架流程如下
1. 安装node环境
windows环境,下载最新的node的稳定版
安装后使用node -v检查安装是否成功
linux环境,下载最新的二进制安装包或者源码包进行安装
2. 安装express开发环境
使用npm -g install express命令即可将express系统全局安装到node模块系统中
npm的全局安装和本地安装的区别,npm全局安装和本地安装在命令行的执行上仅仅在于是否添加了-g参数,
如果添加了-g参数,则是全局安装,否则是本地安装,全局安装后可以在命令行中执行相关的命令,一般如express等需要在命令行中执行的模块建议选择全局安装,
而本地安装则是在当前命令运行的目录下创建node_modules文件夹,将依赖的相关模块下载安装到此文件夹下,一般依赖的一些第三方的库建议选择本地安装
3. 使用express模板,生成express工程
使用express -e myprj 命令生成express的工程,其中使用-e 表示使用的是ejs模板 来生成对应的html文件
生成对应的工程后,可以在工程目录中看到
bin, node_modules, public, routes,views, app.js, packapge.json文件/文件夹
其中package.json文件为工程的描述文件
app.js为系统的启动文件
routes中包含两个文件index. js user.js涉及到路由相关的内容
views中为系统的模板文件,系统需要使用到的一些html,ejs模板均可以在此目录下找到,
public为一些公共文件的路径,主要存放一些js,图片,css等静态资源
node_modules为工程中需要使用的一些node模块的存放地,可以在package.json文件中添加工程依赖的相关模块,然后使用npm install命令即可将相关的模块
局部安装到此目录下
bin为系统启动的脚本文件
4. 安装redis连接器中间件
使用npm install redis-connector命令即可将redis的node驱动安装到本工程中
5. 修改app.js
其中cookie设置session的时间(单位毫秒),需要注意的是此时间需要设置为大于1分钟,过短可能会导致session不过期的现象
在path后加载session模块和redis的驱动模块
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
session使用redis作为session的存放地,当然也可以存放在mongodb中,redis的性能自不必多少,由于redis在存放的数据大于1k的时候性能可能会急剧下降,redis在处理大数据量的性能测试,可以参考相关性能测试结果,因此不要将过多的数据存放在redis中。由于使用redis作为session存储的地方,因此可以设置数据的过期时间,有些在构造参数中设置ttl数据,应该是设置缓存的session数据在redis中的过期时间
app.use(session({
store: new RedisStore({
host: "192.168.142.138",
port: 6379,
db: "0"
}),
resave:false,
saveUninitialized:true,
secret: 'keyboard cat',
cookie: {maxAge: 100000}
}))
app.use('/', routes);
app.use('/users', users);
对session的处理要放在/拦截器和/users拦截器的前面
其中cookie设置session的时间(单位毫秒),需要注意的是此时间需要设置为大于1分钟,过短可能会导致session不过期的现象
也可以在redis中设置ttl值,此值应该是redis中存放的数据的过期时间。如果没有做redis数据的重新更新,则最后一次设置到redis中的session数据在经过了ttl时间后会自动的清除redis中的缓存数据
store: new RedisStore({
host: "192.168.142.138",
port: 6379,
db: "0",
ttl : 1000
}),
这样在程序中就可以获取到对应的session数据了,如果要修改session的数据,可以直接将数据保存到session中即可。如下所示
router.get('/login', function(req, res){
console.log(req);
//定义user对象存储页面提交的数据
var user = {
name : req.query.name,
password : req.query.password
};
//将user对象存入到session中,在success.ejs页面显示相关信息
req.session.user = user;
res.render('success', {
title : "xxxffff",
user: req.session.user
}
);
});
6. 安装superior,以便可以实时的检测到系统文件的变化
使用如下命令安装,需要注意的是superior必须全局安装,否则错误命令会提示安装到全局
npm -g install supervisor
安装后就需要使用
supervisor app.js来启动程序,而不是使用node app.js来启动程序
7. 启动系统
由于安装了supervisor,而在express4.x版本中express的启动方式修改为npm start来启动系统,其实在packapge.json中已经使用了
"scripts": {
"start": "node ./bin/www"
},
来启动系统的,因此此处需要修改为
"scripts": {
"start": "supervisor ./bin/www"
},
使用npm start来启动系统
访问http://localhost:3000即可
对于基本的环境已经搭建完毕,可以使用console.log(req.session)来在后台打印session中的相关内容
检查访问后,是否在redis中可以看到相关的数据,可以使用redis的命令行工具来检查相关的数据是否正确。
后续会加入mongodb来将相关数据保存到mongodb中
其中cookie设置session的时间(单位毫秒),需要注意的是此时间需要设置为大于1分钟,过短可能会导致session不过期的现象
异步化的开发模式虽然在性能上有很大的提升,但是个人觉得基于异步化的开发模式,会似的代码分散在各个模块中,对面向对象的封装性有着比较大的侵扰。当然也可能仅仅是个人的一点愚见。
言归正传,搭建基于express的web开发框架流程如下
1. 安装node环境
windows环境,下载最新的node的稳定版
安装后使用node -v检查安装是否成功
linux环境,下载最新的二进制安装包或者源码包进行安装
2. 安装express开发环境
使用npm -g install express命令即可将express系统全局安装到node模块系统中
npm的全局安装和本地安装的区别,npm全局安装和本地安装在命令行的执行上仅仅在于是否添加了-g参数,
如果添加了-g参数,则是全局安装,否则是本地安装,全局安装后可以在命令行中执行相关的命令,一般如express等需要在命令行中执行的模块建议选择全局安装,
而本地安装则是在当前命令运行的目录下创建node_modules文件夹,将依赖的相关模块下载安装到此文件夹下,一般依赖的一些第三方的库建议选择本地安装
3. 使用express模板,生成express工程
使用express -e myprj 命令生成express的工程,其中使用-e 表示使用的是ejs模板 来生成对应的html文件
生成对应的工程后,可以在工程目录中看到
bin, node_modules, public, routes,views, app.js, packapge.json文件/文件夹
其中package.json文件为工程的描述文件
app.js为系统的启动文件
routes中包含两个文件index. js user.js涉及到路由相关的内容
views中为系统的模板文件,系统需要使用到的一些html,ejs模板均可以在此目录下找到,
public为一些公共文件的路径,主要存放一些js,图片,css等静态资源
node_modules为工程中需要使用的一些node模块的存放地,可以在package.json文件中添加工程依赖的相关模块,然后使用npm install命令即可将相关的模块
局部安装到此目录下
bin为系统启动的脚本文件
4. 安装redis连接器中间件
使用npm install redis-connector命令即可将redis的node驱动安装到本工程中
5. 修改app.js
其中cookie设置session的时间(单位毫秒),需要注意的是此时间需要设置为大于1分钟,过短可能会导致session不过期的现象
在path后加载session模块和redis的驱动模块
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
session使用redis作为session的存放地,当然也可以存放在mongodb中,redis的性能自不必多少,由于redis在存放的数据大于1k的时候性能可能会急剧下降,redis在处理大数据量的性能测试,可以参考相关性能测试结果,因此不要将过多的数据存放在redis中。由于使用redis作为session存储的地方,因此可以设置数据的过期时间,有些在构造参数中设置ttl数据,应该是设置缓存的session数据在redis中的过期时间
app.use(session({
store: new RedisStore({
host: "192.168.142.138",
port: 6379,
db: "0"
}),
resave:false,
saveUninitialized:true,
secret: 'keyboard cat',
cookie: {maxAge: 100000}
}))
app.use('/', routes);
app.use('/users', users);
对session的处理要放在/拦截器和/users拦截器的前面
其中cookie设置session的时间(单位毫秒),需要注意的是此时间需要设置为大于1分钟,过短可能会导致session不过期的现象
也可以在redis中设置ttl值,此值应该是redis中存放的数据的过期时间。如果没有做redis数据的重新更新,则最后一次设置到redis中的session数据在经过了ttl时间后会自动的清除redis中的缓存数据
store: new RedisStore({
host: "192.168.142.138",
port: 6379,
db: "0",
ttl : 1000
}),
这样在程序中就可以获取到对应的session数据了,如果要修改session的数据,可以直接将数据保存到session中即可。如下所示
router.get('/login', function(req, res){
console.log(req);
//定义user对象存储页面提交的数据
var user = {
name : req.query.name,
password : req.query.password
};
//将user对象存入到session中,在success.ejs页面显示相关信息
req.session.user = user;
res.render('success', {
title : "xxxffff",
user: req.session.user
}
);
});
6. 安装superior,以便可以实时的检测到系统文件的变化
使用如下命令安装,需要注意的是superior必须全局安装,否则错误命令会提示安装到全局
npm -g install supervisor
安装后就需要使用
supervisor app.js来启动程序,而不是使用node app.js来启动程序
7. 启动系统
由于安装了supervisor,而在express4.x版本中express的启动方式修改为npm start来启动系统,其实在packapge.json中已经使用了
"scripts": {
"start": "node ./bin/www"
},
来启动系统的,因此此处需要修改为
"scripts": {
"start": "supervisor ./bin/www"
},
使用npm start来启动系统
访问http://localhost:3000即可
对于基本的环境已经搭建完毕,可以使用console.log(req.session)来在后台打印session中的相关内容
检查访问后,是否在redis中可以看到相关的数据,可以使用redis的命令行工具来检查相关的数据是否正确。
后续会加入mongodb来将相关数据保存到mongodb中
其中cookie设置session的时间(单位毫秒),需要注意的是此时间需要设置为大于1分钟,过短可能会导致session不过期的现象