将在Dotinstall上创建的聊天服务器的值存储在Mongodb中

概要:提供一个汉语的同义词。

平时由于经常使用PHP,视野容易变得狭窄,为了转换思维,我通过使用Dotinstall的Node.js教程,创建了一个聊天服务器。
在这种情况下,当重新启动JS文件时,数据将丢失。
因此,我决定使用MongoDB来存储聊天内容,并确保即使重新启动,数据也能得以保留。

请在上述课程的基础上进行Node.js的引入和语法,本文不再赘述。

引入MongoDB

在已经安装了Node.js的服务器上,将MongoDB引入。
引入操作按照以下步骤进行。

    1. 编辑 mongodb.repo 文件

 

    1. 执行 yum 安装

 

    1. 启动 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" ] }
スクリーンショット 2017-11-20 1.52.56.png

使用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的文章。

广告
将在 10 秒后关闭
bannerAds