一.MongoDB(开源的 NoSQL 数据库) ==> 是一个对象数据库,它没有表、行等概念,也没有固定的模式和结构, 数据格式就是JSON, 示例
{ "_id" : ObjectId( "4f7fe8432b4a1077a7c551e8" ), "uid" : 2004, "username" : "byvoid", "net9" : { "nickname" : "BYVoid", "surname" : "Kuo", "givenname" : "Carbo", "fullname" : "Carbo Kuo", "emails" : [ "byvoid@byvoid.com", "byvoid.kcp@gmail.com" ], "website" : "http://www.byvoid.com", "address" : "Zijing 2#, Tsinghua University" } }
1.下载 https://www.mongodb.com/download-center#community
2.解压缩到自己想要安装的目录,比如F:mongodb
3.安装完后创建文件夹
- F:mongodbdatadb 安装db
- F:mongodbdatalog 日志文件
- F:mongodbdatalogMongoDB.log 在log文件夹下创建一个日志文件MongoDB.log
4.运行cmd.exe进入dos命令界面,执行下列命令
> cd F:mongodbin > F:mongodbin>mongod -dbpath "F:mongodbdatadb"
看到类似的信息,则说明启动成功,默认MongoDB监听的端口是27017,mysql的是3306
5.测试连接
新开一个cmd窗口,进入mongodb的bin目录,输入mongo或者mongo.exe, 如有看到版本则表示连接127.0.0.1:27017数据库成功
6.输入exit或者ctrl+C可退出。
7.当mongod.exe被关闭时,mongo.exe 就无法连接到数据库了,因此每次想使用mongodb数据库都要开启mongod.exe程序,所以比较麻烦,此时我们可以将MongoDB安装为windows服务
运行cmd,进入bin文件夹,执行下列命令
> F:mongodbin>mongod --dbpath "F:mongodbdatadb" --logpath "F:mongodbdatalogMongoDB.log" --install --serviceName "MongoDB"
这里MongoDB.log就是开始建立的日志文件,--serviceName "MongoDB" 服务名为MongoDB
接着启动mongodb服务
> F:mongodbin>NET START MongoDB
8.关闭服务和删除进程
> F:mongodbin>NETstop MongoDB (关闭服务) > F:mongodbin>mongod --dbpath "F:mongodbdatadb" --logpath "F:mongodbdatalogMongoDB.log" --remove --serviceName "MongoDB" (删除,注意不是--install了)
9.如果报错(Cannot find module 'mongodb'), 则缺少mongodb依赖模块
$ npm install mongodb
二.MongoDB数据库可视化工具RoboMongo
下载地址 https://robomongo.org/download
1.创建新的Mongodb ==> 点击Create
2.自定义db名称
3.连接
4.操作界面
三. node连接数据库
1.创建settings.js文件, db 是数据库的名称, host 是数据库的地址。 cookieSecret 用于 Cookie 加密与数据库无关
module.exports = { cookieSecret: 'microblogAlan', db: 'microblog', // 数据库名称 host: 'localhost' // 数据库的地址 };
2.models/db.js 数据库连接配置模块
var settings = require('../settings'), Db = require('mongodb').Db, Connection = require('mongodb').Connection, Server = require('mongodb').Server; module.exports = new Db(settings.db, new Server(settings.host, '27017', {}), {safe: true}); // module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT, {}), {safe: true});
如果报错(Cannot read property 'DEFAULT_PORT' of undefined ) Connection.DEFAULT_PORT 改成27017
3.express4里要单独安装cookie-parser和express-session
express.cookieParser() 是 Cookie 解析的中间件
express.session() 则提供会话支持,设置它的 store 参数为 MongoStore 实例,把会话信息存储到数据库中,以避免丢失。
$ npm install express-session --save $ npm install cookie-parser --save
4.app.js引用settings模块的时候, 数据库引用
var settings = require('./settings'); var cookieParser = require('cookie-parser') var session = require('express-session') app.use(cookieParser()) /* 数据库引用 */ app.use(session({ secret: settings.cookieSecret, store: new MongoStore({ // db: settings.db, url: 'mongodb://localhost/' + settings.db }) }));
5.当我们从一个action重定向(redirect)到另一个action时,如果想要将数据从上一个action携带到新的action中,就可以采用flash。
当然,用session也是可以的,只不过用session的时候需要注意下,需要自己手动清除用完后的变量。因为如果不清楚session,会造成内存的浪费。
但是最新版本的express已经不支持flash了, 先安装
$npm install connect-flash
然后在app.js中引入
var flash = require('connect-flash'); app.use(flash());
1.req.body 就是 POST 请求信息解析过后的对象,例如我们要访问用户传递的password 域的值,只需访问 req.body['password'] 即可。
2.req.flash 是 Express 提供的一个奇妙的工具,通过它保存的变量只会在用户当前和下一次的请求中被访问,之后会被清除,通过它我们可以很方便地实现页面的通知和错误信息显示功能。
3.res.redirect 是重定向功能,通过它会向用户返回一个 303 See Other 状态,通知浏览器转向相应页面。
4.crypto 是 Node.js 的一个核心模块,功能是加密并生成各种散列,使用它之前首先要声明 var crypto = require('crypto')。我们代码中使用它计算了密码的散列值。
5.User 是我们设计的用户对象,在后面我们会详细介绍,这里先假设它的接口都是可用的,使用前需要通过 var User = require('../models/user.js') 引用。5.6 用户注册和登录
6.User.get 的功能是通过用户名获取已知用户,在这里我们判断用户名是否已经存在。
7.User.save 可以将用户对象的修改写入数据库。
8.req.session.user = newUser 向会话对象写入了当前用户的信息,在后面我们会通过它判断用户是否已经登录。