您的位置:首页 > 数据库 > Redis

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不过期的现象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: