Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2220|回复: 4
打印 上一主题 下一主题

nodejs学习笔记 四 [数据库支持mongodb]

[复制链接]

257

主题

354

帖子

1677

积分

金牌会员

Rank: 6Rank: 6

积分
1677
跳转到指定楼层
楼主
发表于 2015-12-12 16:49:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jimu 于 2015-12-17 22:54 编辑

1.数据库的支持
mongodb下载安装 https://www.mongodb.org/https://fastdl.mongodb.org/win32/mongodb-win32-i386-3.2.0.zip
下载zip文件 mongodb-win32-i386-3.2.0.zip
解压放入D:\mongodb
再创建Data、 log 和 Data\db文件夹
设置数据文件存放到D:\mongodb\Data\db进入目录D:\mongodb\bin
创建config.conf 输入
  1. storage:
  2.    dbPath: D:\mongodb\Data\db
  3.    engine: mmapv1
复制代码
mongod利用mmapv1启动  这个是default的启动方式。
执行命令:D:\mongodb\bin>mongod -f D:\mongodb\bin\config.conf默认打开27017端口,可在浏览器中查看http://localhost:27017/
It looks like you are trying to access MongoDB over HTTP on the native driver port.
作为window服务

D:\mongodb\bin>mongod --journal --logpath D:\mongodb\log\MongoDB.log --logappend --dbpath D:\mongodb\Data\db
--serviceName MongoDB --install --auth

移除服务
mongod --remove
把D:\mongodb\bin添加到环境变量
创建一个用于会话启动的bat文件mongo.bat:
mongo 127.0.0.1:27017/admin

在bin目录下打开 mongo.exe来操作数据库
常用命令:
show dbs //查看所有库
use firemail //使用指定的库
show conllections 查看所有的文件
db.表名.find() 查询指定文档的数据
db.表名.insert({name:'firemail'}} 插入数据
将mongoDB加入到windows操作系统服务中

启动服务
net start mongodb


2.项目中加入mongodb
加入mongodb的依赖包
修改package.json文件中的
dependencies:{
  ...
  "connect":".== 1.x",
  "connect-mongo":">= 0.1.7",
"mongodb":">=0.9.9"
...
}
执行 npm install更新依赖包

创建 settings.js,用于配置数据库连接的信息。
module.exports={
   cookieSecret='firemail',   --用于Cookie加密与数据库无关
   db:'firemail',      ---数据库名称
   host:'localhost'    ---数据库地址
}
创建db.js,提供数据库连接对象。
创建models/db.js文件
3.会话支持
Express也提供了会话中间件,默认情况下是把用户信息存储在内存中,我有了MongoDB,
就把会话信息存储在数据库中,便于持久维护。
需要connect、connect-mongo两个模块。前面已经加入了包的支持,我们直接修改app.js的程序入口。
引入模块
cconnect=require("connect")
MongoStore=require('connect-mongo')(connect)
//使用cookie中间件
app.use(express.cookieParser());
会话中间件,存放在mongodb中
app.use(express.session({
      secret:settings.cookieSecret,
//把会话信息存储到数据库中。
    store.new MongoStore({
      db:settings.db
   })
}));








回复

使用道具 举报

257

主题

354

帖子

1677

积分

金牌会员

Rank: 6Rank: 6

积分
1677
沙发
 楼主| 发表于 2015-12-17 22:34:07 | 只看该作者
常见问题:
MongoDB错误32-bit servers don't have journaling enabled by default解决方法

经过多次测试发现,造成这种情况的原因是我使用PowerCMD启动MongoDB之后直接关掉PowerCMD窗口之后造成的,如果在关闭PowerCMD窗口之前使用 [ctrl + c] 快捷键终止mongod的运行也不会出现此种情况。而且,使用普通的CMD窗口运行mongo命令即使直接关掉窗口也不会出现该问题,看来还是使用原生程序更靠谱。
发生了此种情况解决方法也很简单,使用如下参数repair即可:
mongod --auth -dbpath C:\mongo\MongoDB\mongo\data --repair
回复 支持 反对

使用道具 举报

257

主题

354

帖子

1677

积分

金牌会员

Rank: 6Rank: 6

积分
1677
板凳
 楼主| 发表于 2015-12-17 23:13:57 | 只看该作者
本帖最后由 jimu 于 2015-12-17 23:22 编辑

安全认证
带有-auth参数时,必须通过认证才可以查询数据。如果没有加-auth参数,即使配置了安全认证用户,也不需要认证谁都可以操作。
db.addUser is not afunction :


db.createUser({ user: 'root', pwd: '123456', roles:['root']})
db.auth('root','123456')


回复 支持 反对

使用道具 举报

257

主题

354

帖子

1677

积分

金牌会员

Rank: 6Rank: 6

积分
1677
地板
 楼主| 发表于 2015-12-19 20:22:31 | 只看该作者
mongodb3.03开启认证 引入的问题及解决
Windows下我做了一个bat文件,用来启动mongodb,命令行如下:
mongod --dbpath db\data --port 27017 --directoryperdb --logpath db\logs\mongodb.log --logappend --auth
最后的参数就是开启和关闭认证,如果是conf配置文件,应该是auth=true或false
1,首先关闭认证,也就是不带--auth参数,启动mongodb
2,使用命令行进入mongodb目录,输入mongo命令,默认进入test数据库
3,use userdb  切换到自己的数据库,输入db,显示userdb
4,创建用户,角色为dbOwner,数据库为userdb,命令行应该是db.createUser({user:'myuser',pwd:'123456',roles:[{role:'dbOwner',db:'userdb'}]})
5,切换到admin数据库,use admin,db ,显示admin,db.shutdownServer()关闭服务器,填上认证参数,启动mongodb;以前的版本此时使用mongovue就可以使用myuser登录到userdb数据库上了,但是3.0.3版本不行,打开mongodb.log文件发现如下错误

authenticate db: userdb { authenticate: 1, nonce: "xxx", user: "myuser", key: "xxx" }
2015-06-02T09:57:18.877+0800 I ACCESS   [conn2] Failed to authenticate myuser@userdb with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document


此1-5步骤针对是3.0.3以前版本已经ok,如果是3.0.3,mongodb加入了SCRAM-SHA-1校验方式,需要第三方工具配合进行验证,下面给出具体解决办法:
首先关闭认证,修改system.version文档里面的authSchema版本为3,初始安装时候应该是5,命令行如下:
> use admin
switched to db admin
>  var schema = db.system.version.findOne({"_id" : "authSchema"})
> schema.currentVersion = 3
3
> db.system.version.save(schema)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

不过如果你现在开启认证,仍然会提示AuthenticationFailed MONGODB-CR credentials missing in the user document
原因是原来创建的用户已经使用了SCRAM-SHA-1认证方式
> use admin
switched to db admin
> db.system.users.find()
[...]
{ "_id" : "userdb.myuser", "user" : "myuser", "db" : "userdb", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "XXXXXXXXXXXXXXXXXXXXXXXX", "storedKey" : "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "serverKey" : "XXXXXXXXXXXXXXXXXXXXXXXXXXX" } }, "roles" : [ { "role" : "dbOwner", "db" : "userdb" } ] }

解决方式就是删除刚刚创建的用户,重新重建即可:
> use userdb
switched to db userdb
> db.dropUser("myuser")
true
>db.createUser({user:'myuser',pwd:'123456',roles:[{role:'dbOwner',db:'userdb'}]})
然后关闭服务器,开启认证,重启服务器,用mongovue连接,一切OK

回复 支持 反对

使用道具 举报

257

主题

354

帖子

1677

积分

金牌会员

Rank: 6Rank: 6

积分
1677
5#
 楼主| 发表于 2016-1-4 23:47:42 | 只看该作者
https://docs.mongodb.org/getting-started/node/client/
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var url = 'mongodb://localhost:27017/test';
MongoClient.connect(url, function(err, db) {
  assert.equal(null, err);
  console.log("Connected correctly to server.");
  db.close();
});
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-2 08:02 , Processed in 0.058119 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表