手记

《Node.js开发指南》microblog手动代码五

用户注册和登录

上一节讲述了创建主页,现在是登录和注册页面,为了实现这个功能,我们需要引入会话机制记录用户的状态,还要访问数据库来保存和读取用户信息,先从数据库开始。
一,访问数据库
这里是选用MongoDB作为网站的数据库系统,它是一个开源的Nosql数据库,相比MySQL那样的关系型数据库,它更轻巧,灵活,适合数据规模很大,事务性不强的场合使用;
MongoDB是一个对象数据库,它没有表,行等概念,也没有固定的模式和结构,所有的数据以文档的形式储存,所谓文档就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数,字符串,日期,数组,还可以是嵌套的文档;

//MongoDB文档示例
{
       "_id" : ObjectId("3601241995"),
       "uid" : 2017,
        "username" : "MGT360124",
        "net" : {
                "sex": "M",
                 "emails": "1142656486@qq.com",
                  "address":"河北秦皇岛",
                } 
}

uid 是一个属性,username是一个字符串属性,_id是文档对象的标识符,格式为特定的ObjectId,net是一个嵌套的文档,其内部一一般文档一样;MongoDB格式就是json格式,在MongoDB中对数据操作都是以文档为单位的,当然也可以修改文档的部分属性,对于查询操作,只需要指定文档的任何一个属性,就可以将数据库中满足条件的所有文档刷选出来,为了加快查询,MongoDB也对文档实现了索引;
二,链接数据库
首先是安装MongoDB,安装指导

http://www.imooc.com/article/18438

本人是将mongodb镜像安装在C:\Program Files\MongoDB\Server\3.4目录下
接下来是配置mongodb
(1)在c:\data目录下建一个db目录, c:\data\db’
(2)在 c:\data\目录下建一个logs目录, c:\data\logs ,在里面建一个文件mongo.log
(3)在c:\data目录下建一个etc目录, c:\data\etc ,在里面建一个文件mongo.conf
mongo.conf的配置信息:

#数据库路径
dbpath = c:\data\db
#日志输出文件路径
logpath = c:\data\logs\mongodb.log
#错误日志采用追加模式,配置这个选项后,mongodb的日志会追加到现有的日志文件,而不是从新创建一个文件
logappend = true
#启用日志文件,默认启用
journal = true
#这个选项可以过滤一些无用的日志信息,若需要调试请设置为false
quiet = false
#端口号默认为 27017
port = 27017

通过在命令中传参的形式启动mongo
在C:\Program Files\MongoDB\Server\3.4\bin目录下,点击鼠标右键+shift键,选择 ”在此处打开命令窗口”

在此命令行下输入:mongod --dbpath c:\data\db

之后在浏览器地址栏中输入http://localhost:27017/

说明mongo启动成功。

通过配置文件的形式启动mongodb,同时安装到window服务当中。
(1)按上面的方法进入到C:\Program Files\MongoDB\Server\3.4\bin此目录下的命令行中输入 : mongod --config c:\data\etc\mongo.conf --install --serviceName "MongoDB"
安装成功后,打开window服务,可以看到里面已经安装了MongoDB

之后,如果要使用mongodb的话,就开启服务即可,如果不设置这种方式,也可以通过上面介绍的方法开启mongodb。

开启mongodb,接下是链接mongodb数据库
为了能在node.js中使用Mongodb,我们需要获取一个模块在package.json的dependencies属性中添加一行代码:

{
 ’dependencies‘: {
        "mongodb": "~3.4.9"
      }
}

然后运行npm install 更新依赖的模块。然后在microblog目录下创建settings.js文件,这个文件用于保存数据库的链接信息,将用到的数据库命为microblog,数据库服务器在本地。settings.js文件的内容为:

//settings.js文件,这个文件用于保存数据库的链接信息
module.exports = {
    cookieSecret : "microblogMGT360124",
    db : "microblog",
    host: "localhost",
};
//db是数据库的名称
//host 是数据库的地址
//cookieSecret是用于cookie加密与数据库无关

接下来在microblog目录下创建models目录,并且在models目录下创建一个db.js文件:

var settings = require("../settings.js");
var Db = require("mongodb").Db;
var Connection = require("mongodb").Connection;
var Server = require("mongdb").Server;

module.exports = new Db(
          settings.db,
          new Server(
                       settings.host,
                       Connection.DEFAULT_PORT,
                       {}),
             {safe:true}
);
//通过module.exports输出了创建的数据库链接,这个模块只能被加载一次,
//以后在其他文件中使用时都是这个实例;在接下来会使用这个模块;

会话支持

会话是一种持久的网络协议,用于完成客户端和服务器之间的一些交互行为,一次会话可能包含多次链接,每次连接都被认为是会话的一次操作,在网络应用开发中,有必要实现会话以帮助用户交互,例如网购的场景,用户浏览了多个页面,每个页面都有购买一些东西,这些请求在多次链接中完成,许多应用层网络协议都是由会话支持的,如FTP,Telnet等。

但是HTTP协议是无状态的,本身不支持会话,因此在没有额外的手段帮助下,服务器并不知道客户购买了什么东西。

为了在无状态的http协议之上实现会话,cookie出现,cookie是一些存储在客户端的信息,每次连接的时候由客户端向浏览器提交,服务器也向浏览器发起存储cookie的请求,依靠这样的手段服务器可以识别客户端,这就是HTTP会话功能的实现。

具体过程是:浏览器首次向服务器发送请求时,服务器生成一个唯一标识并发送给客户端的浏览器,浏览器将这个唯一标识符存储在cookie中,以后每次发起请求时,客户端浏览器都会向服务器传送这个唯一标识符,服务器通过这个标识符来识别客户端浏览器。

就相当于派出所给每个人发的身份证;每次要有什么事都要出示身份证(唯一标识符)给派出所。

对于开发者来说,我们无需关注浏览器的存储,需要关注的仅仅是如何通过这个唯一标识符来识别用户,很多服务器脚本语言都有会话功能,Express也提供了会话中间件,默认是把用户信息存储在内存中,但我们既然已经有了Mongodb,不妨把会话信息存储在数据库中,方便持久维护,为了使用这个功能,我们首选要获得一个叫做connect-mongo的模块,在package.json中加入:

{
 ’dependencies‘: {
        "connect-mongo": "2.0.0"
      }
}

还需要安装express-session , 也是通过在工程目录下npm install express-session
运行npm install 更新模块,然后打开app.js,添加:

var session = require("express-session");
var MongoStore = require("connect-mongo")(session);
var settings = require("./settings");
app.use(session({
       secret : settings.cookieSecret,
       store : new MongoStore({
        db : "microblog",
        host: "127.0.0.1",
        port: "27017", 
        url:"mongodb://localhost:27017/microblog",
       })
})) 
1人推荐
随时随地看视频
慕课网APP