将在Dotinstall上创建的聊天服务器的值存储在Mongodb中
概要:提供一个汉语的同义词。
平时由于经常使用PHP,视野容易变得狭窄,为了转换思维,我通过使用Dotinstall的Node.js教程,创建了一个聊天服务器。
在这种情况下,当重新启动JS文件时,数据将丢失。
因此,我决定使用MongoDB来存储聊天内容,并确保即使重新启动,数据也能得以保留。
请在上述课程的基础上进行Node.js的引入和语法,本文不再赘述。
引入MongoDB
在已经安装了Node.js的服务器上,将MongoDB引入。
引入操作按照以下步骤进行。
-
- 编辑 mongodb.repo 文件
-
- 执行 yum 安装
-
- 启动 MongoDB
- 安装 MongoDB 驱动程序
1. 编辑mongodb.repo文件
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
执行yum安装命令。
sudo yum -y install mongodb-org
3. 启动MongoDB
sudo service mongod start
sudo chkconfig mongod on
4. 安装MongoDB驱动程序
为了处理MongoDB,您需要安装一个驱动程序。
有两个选择,可以使用MongoDB的官方驱动程序mongodb,或者使用其对象封装库Mongoose。
这次我们将使用mongodb来处理。
npm install mongodb
MongoDB的安装已经完成了。
Node.js + MongoDB (节点.js + MongoDB)
在程序中导入驱动程序,并对MongoDB进行操作。
var MongoClient = require('mongodb');
(中略)
/**
* MongoDBからデータを取得する
*
* @param {string} id 取得対象のコレクション
*/
var getChatDetail = function (id, callback) {
MongoClient.connect('mongodb://' + setting.db_host + '/' + setting.db, function(err, db) {
if (err) {
return console.dir(err);
}
db.collection(setting.collection, function(err, collection) {
collection.find({}, {chat_data:1, _id : 0}).toArray(function(err, id){
callback(id);
});
});
db.close();
});
}
/**
* MongoDBにデータを格納する
*
* @param {string} id 取得対象のコレクション
* @param {array} posts 格納するチャット内容
*/
function savaChatDetail(id, posts) {
MongoClient.connect('mongodb://' + setting.db_host + '/' + setting.db, function(err, db) {
if (err) {
return console.dir(err);
}
var documentName = setting.document;
var params = {};
params[documentName] = posts;
getChatDetail(documentName, function (result) {
if (result.length !== 0
&& Object.keys(result['0']).length
) {
var updateTarget = {};
updateTarget[documentName] = result['0'][documentName];
db.collection(setting.collection, function(err, collection) {
collection.updateOne(updateTarget, {$set : params});
});
} else {
// 保険的な意味合いでDBに保存するので失敗しても無視
db.collection(setting.collection, function(err, collection) {
collection.insertOne(params);
});
}
db.close();
});
});
}
已经完成了将数据存储和检索到MongoDB的实现。实际在浏览器上操作时,数据已经成功注册到MongoDB中。
db.chat.find();
{ "_id" : ObjectId("5a10453d92f6df2653fab4b7"), "chat_data" : [ "pop", "98" ] }

使用Node.js和MongoDB的体验感受
我第一次使用Node.js和MongoDB时遇到了以下问题。
-
- Node.jsはノンブロッキングなため、PHPのように上から処理が流れず、MongoDBからデータを取得してから動くようにするのに苦戦した
- 普段使うMySQLと違ってプライマリーキーがないので、同じ内容のドキュメントが沢山登録されてびっくりした
虽然有些困难,但学习了以前从未使用过的语言和技术,非常好。
我已经将此次编写的代码上传到这里。
非常感谢您阅读到最后。
参考资料的中文翻译。
http://mongodb.github.io/node-mongodb-native/2.1/api/ –
mongodb官方提供的Node.js驱动程序文档。
https://qiita.com/itagakishintaro/items/a1519998a91061cbfb1e –
这是itagakishintaro在Qiita上发布的一篇关于MongoDB的文章。