一、模板引擎
一个将页面模块和要显示的数据结合起来生成HTML页面的工具,相当于MVC找那个的视图V。ejs模板引擎与express集成良好。
app.set('views', path.join(__dirname, 'views'))//设置了模板文件的存储位置
app.set('view engine', 'ejs')// 设置使用ejs模板引擎
二、使用数据库 MongoDB
1、MongoDB
MongoDB是一个基于分布式文件存储的非关系型数据库(NoSQL),旨在为web提供可扩展的高性能数据存储方案,支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。
MongoDB 有文档和集合的概念:
- 文档是MongoDB最基本的单位,每个文档都会以唯一的_id标识,文档的属性为key/value的键值对形式,文档可以嵌套另一个文档;
- 集合是文档的总和,一个数据库有多个集合。
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
}
2、Mongoose
Mongoose是MongoDB数据库的模型工具,为Node.js设计,使用Mongoose可简化不少代码。
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/blog');
var userSchema = new mongoose.Schema({
name: String,
password: String,
email: String,
head: String
}, {
collection: 'users'
});
var userModel = mongoose.model('User', userSchema);
function User(user) {
this.name = user.name;
this.password = user.password;
this.email = user.email;
};
User.prototype.save = function(callback) {
var user = {
name: this.name,
password: this.password,
email: this.email,
};
var newUser = new userModel(user);
newUser.save(function (err, user) {
if (err) {
return callback(err);
}
callback(null, user);
});
}
三、Redis
对于高并发数据量小的服务,使用Node.js和Redis绝对是一个不二的选择,它们都是单线程模式,异步非堵塞I/O。
1、Redis概念
一个支持网络、可基于内存也可持久化的日志型、key-value数据库。
2、特点
- 存储的是一个个key-value键值对;
- 内存数据库;存储在磁盘即持久化;
- 五种数据类型(string字符串、hash哈希、list链表、set无序集合、zset有序集合)
3、数据类型
- string字符串:基本数据类型;
- hash哈希:字符串类型的字段和字段值的映射表,适合存储对象;
- list链表:存储一个有序的字符串列表,内部是使用双向链表实现;通常用链表实现栈和队列;
- set集合:唯一的,无序的,可以进行交并差的操作。
Redis的hash、list、set、zset都不支持数据类型的嵌套。
4、基本使用
通用
- KEYS*:返回Redis中所有的键;
- Redis命令不区分大小写;
- 数字值在Redis中以字符串的形式保存;
字符串
- SET key value:设置key的值为value;
- GET key:获取key的值;
- INCR key:key的值加1(若key不存在则设key初值为0且自增1,若key值不为整数时会提示错误)
哈希
- HSET key field value:设置key(对象)的field字段值为value;
- HGET key field:获取key(对象)的field字段的值;
- HGETALL key:获取key中所有的字段和其值;
链表类型
适合存储如社交网站的新鲜事,假如有几千万条,但获取头部或尾部的10条记录也是极快的。
- LPUSH key value/[value...]:往key链表左边添加元素;
- RPUSH key value/[value...]:往key链表右边添加元素;
- LPOP key :移除key链表左边第一个元素;
- RPOP key :移除key链表右边第一个元素;
- LRANGE key start stop:获取链表中某一个片段;-1表示最后一个元素;
集合类型
- SADD key number/[number...]:向集合添加一个或多个元素,若添加的元素集合已存在,则忽略这个元素;
- SREM key number/[number...]:向集合删除一个或多个元素;
- SMEMBERS key:返回集合中所有元素;
- SINTER key/[key...]:多个集合执行交集运算;
- SDIFF key/[key...]:多个集合执行差集运算;
- SUNION key/[key...]:多个集合执行并集运算;
有序集合类型
有序集合中每个元素都关联了一个分数,通过分数指定分数范围内的元素等与分数有关的操作;
- ZADD key score number/[sorce number...]:向有序集合添加一个或多个元素和该元素对应的值,若添加的元素集合已存在,则用新的分数替换原来的分数;
- ZREM key number/[number]:向集合删除一个或多个元素;
- ZRANGE key start stop[WITHSCORES]:按元素分数从小到大顺序返回从start到stop之间所有的元素;如果需要同时获得元素分数的话,在尾部加上WITHSCORES参数;如果两个元素分数相同,则按照元素字典顺序排列;
- ZREVRANGE key start stop[WITHSCORES]:同上,按元素分数从大到小顺序;