도트 설치로 만든 채팅 서버의 값을 Mongobb에 저장

개요



평소에는 PHP 메인으로 시야가 좁아지기 쉽기 때문에, 전환을 위해 점 설치 Node.js 수업 로 채팅 서버를 작성했습니다.
이 상태에서 JS 파일을 다시 시작하면 데이터가 손실됩니다.
따라서 MongoDB를 사용하여 채팅 내용을 DB에 저장하고 다시 시작해도 데이터를 인계합니다.

Node.js의 도입이나 구문에 대해서는 언급하지 않으므로, 상기의 레슨을 기초로 도입해 주세요.

MongoDB 도입



MongoDB를 Node.js가 설치된 서버에 배포합니다.
도입은 아래의 순서로 실시합니다.
  • mongodb.repo 편집
  • yum 설치 실행
  • MongoDB 시작
  • MongoDB 드라이버 설치

  • 1. mongodb.repo 편집



    /etc/yum.repos.d/mongodb.repo
    [mongodb]
    name=MongoDB Repository
    baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
    gpgcheck=0
    enabled=1
    

    2. yum 설치 실행


    sudo yum -y install mongodb-org
    

    3. MongoDB 시작


    sudo service mongod start
    sudo chkconfig mongod on
    

    4. MongoDB Driver 설치



    Node.js에서 MongoDB를 처리하기 위해 드라이버를 설치합니다.
    드라이버는 MongoDB의 공식 드라이버 mongodb를 사용하거나 해당 객체 래퍼 라이브러리의 Mongoose가 있습니다.
    이번에는 mongodb를 이용합니다.
    npm install mongodb
    

    이것으로 MongoDB의 도입이 완료됩니다.

    Node.js + MongoDB



    프로그램 내에서 도입한 드라이버를 읽어 MongoDB를 조작해 갑니다.

    server.js
    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" ] }
    

    이제 server.js의 처리를 중지하고 다시 실행해도 데이터를 인계 할 수있었습니다.


    Node.js와 MongoDB를 사용한 인상



    처음으로 Node.js와 MongoDB를 사용하여 다음과 같은 점에 빠졌습니다.
  • Node.js는 비 차단이기 때문에 PHP처럼 위에서 처리가 흐르지 않고 MongoDB에서 데이터를 가져온 다음 움직이는 데 어려움을 겪었습니다.
  • 평소 사용하는 MySQL과 달리 프라이머리 키가 없기 때문에, 같은 내용의 문서가 많이 등록되어 깜짝 놀랐다

  • 주저하는 일도 있었습니다만, 평상시 사용한 적이 없는 언어+기술을 학습할 수 있어서 좋았습니다.
    이번에 만든 코드는 여기으로 올렸습니다.

    끝까지 읽어 주셔서 감사합니다.

    참고 자료



    htp://mongo db. 기주 b. 이오 / 그래서 - 몽고 db 나치 ゔ / 2.1 / 아피 /
    h tps:// 퀵했다. 작은 m/이타가키 뻗어/있어 MS/아1519998

    좋은 웹페이지 즐겨찾기