質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

0回答

727閲覧

ログが残り続けるチャットをnode.jsで作りたい

phj

総合スコア6

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2021/05/22 07:20

前提・実現したいこと

node.jsを学ぶ過程で更新してもログが残り続けるたり、途中で参加しても今までのログが残っているチャットを作りたいです。

発生している問題・エラーメッセージ

Mongoを使うということは、調べていて分かったのですがそれをどう組み込めが良いかがわかりません。 (mongoのインストールは出来ています。)

ソースコード

"use strict";

const http = require("http");
const express = require("express");
const socketIO = require("socket.io");
const moment = require("moment");

const m = moment();
console.log(m.format()); // => 2019-06-17T21:21:54+09:00
console.log(m.format("YYYY-MM-DD HH:mm:ss")); // => 2019-06-17 21:21:54

// オブジェクト
const app = express();
const server = http.Server(app);
const io = socketIO(server);

/** 定数 */
const PORT = process.env.PORT || 3000;
const SYSTEM_NICKNAME = "";

// グローバル変数
let iCountUser = 0; // ユーザー数

// 接続時の処理
io.on("connection", socket => {
console.log("connection");

let strNickname = ""; // コネクションごとで固有のニックネーム。イベントをまたいで使用される。 socket.on("disconnect", () => { console.log("disconnect"); if (strNickname) { // ユーザー数の更新 iCountUser--; // メッセージオブジェクトに現在時刻を追加 const strNow = moment().format("YYYY年M月D日"); // システムメッセージの作成 const objMsg = { strNickname: SYSTEM_NICKNAME, strMsg: strNickname + " さんが退室しました。" + " この部屋には現在 " + iCountUser + "人居ます。", strDate: strNow }; // 送信元含む全員に送信 io.emit("spread message", objMsg); }

});

// 入室時の処理
socket.on("join", strNickname_ => {
console.log("joined :", strNickname_);

strNickname = strNickname_; // ユーザー数の更新 iCountUser++; // メッセージオブジェクトに現在時刻を追加 const strNow = moment().format("YYYY年M月D日"); // システムメッセージの作成 const objMsg = { strNickname: SYSTEM_NICKNAME, strMsg: strNickname + " さんが入りました." , strDate: strNow }; io.emit("spread message", objMsg);

});

socket.on("new message", strMsg => {
console.log("new message", strMsg);

// 現在時刻の文字列の作成 const strNow = moment().format("YYYY年M月D日"); // メッセージオブジェクトの作成 const objMsg = { strNickname: strNickname, strMsg: strMsg, strDate: strNow }; io.emit("spread message", objMsg);

});
});

// 公開フォルダの指定
app.use(express.static(__dirname + "/public"));

// サーバーの起動
server.listen(PORT, () => {
console.log("server starts on port: %d", PORT);
});

nodejs

1

試したこと

mongo チャットなどで検索してみましたが、古い記事が多くバージョンが違うことが多かったです。

補足情報(FW/ツールのバージョンなど)

node.js v14.16.1
soketo v4.1.2
express v4.17.1
moment v2.29.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2021/05/22 07:40

> mongo チャットなどで検索してみましたが、古い記事が多くバージョンが違うことが多かったです。 バージョンが違っても問題無いと思いますが、どういった部分で問題になったんでしょう
phj

2021/05/22 07:53

参考にしているサイトと同じようにでコマンドを打っても,表示されるものが見本と違うことが多くその先の進め方がわからないことが多かったのですが、これはバージョンの違いではないのでしょうか? 初歩的な質問で申し訳ないです。
hentaiman

2021/05/22 08:00

組み込むというからソースのどこでmongoを利用するのか分からないという意味だと思い、それなら特にバージョンの違いは気にせずロジックを参考にすれば済む話だと思いました ではmongodbのインストールや使い方自体が分からないという質問ですか?
phj

2021/05/22 08:24

(組み込むというからソースのどこでmongoを利用するのか分からないという意味)これで合ってます。 バージョンが違ってわからないというのは、mongodbではなく参考にしているサイトはexpressで雛形を作り、そこに書き込んでいるのですが、その雛形がうまく作れないという意味です。(具体的にコマンドを書くとnpm install -g express@2.5.11 やnpm install socket.io@0.8.7です。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問