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

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

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

Pug(旧Jade)とは、HTMLを書くためのテンプレートエンジン。タグで囲む必要がないなど記述を省略できるため、HTMLの記述が簡単になります。ファイル分割も可能で、変数やループなど便利な機能も備わっています。

Node.js

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

Socket.IO

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

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

Q&A

解決済

1回答

477閲覧

現在使用しているjsファイルにsocket.ioを使ってroom機能を実装したい

mariko68311

総合スコア10

Pug

Pug(旧Jade)とは、HTMLを書くためのテンプレートエンジン。タグで囲む必要がないなど記述を省略できるため、HTMLの記述が簡単になります。ファイル分割も可能で、変数やループなど便利な機能も備わっています。

Node.js

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

Socket.IO

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

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

0グッド

0クリップ

投稿2022/01/17 09:22

実現したいこと

私が現在ボードゲーム作成のために使用しているjsファイルにsocket.ioを使ってroom機能を付与したいです。
ちなみにhtmlファイルではなくpugファイルを使用しています。

発生している問題

最後に載せている参考サイトのプログラムをうまく組み込ませてroom機能を実装しようとしてもサーバーが起動した途端落ちてしまったり、プログラムの中身が表示されてしまったりしてしまいます。

該当のソースコード

js

1const express = require("express"); 2const app = express(); 3const http = require("http").createServer(app); 4const PORT = process.env.PORT || 3001; 5 6app.set("view engine", "pug"); 7app.use(express.static(`${__dirname}/public`)); 8 9app.get("/", (req, res) => { 10 res.render("index_gest"); 11}); 12app.get("/index_gest", (req, res) => { 13 res.render("index_gest"); 14}); 15app.get("/index_user", (req, res) => { 16 res.render("index_user"); 17}); 18app.get("/login", (req, res) => { 19 res.render("login"); 20}); 21app.get("/useradd", (req, res) => { 22 res.render("useradd"); 23}); 24app.get("/useraddcomp", (req, res) => { 25 res.render("useraddcomp"); 26}); 27app.get("/pieceprogramsettings1", (req, res) => { 28 res.render("pieceprogramsettings1"); 29}); 30app.get("/pieceprogramsettings2", (req, res) => { 31 res.render("pieceprogramsettings2"); 32}); 33app.get("/pieceprogramsettings3", (req, res) => { 34 res.render("pieceprogramsettings3"); 35}); 36app.get("/pieceprogramsettings4", (req, res) => { 37 res.render("pieceprogramsettings4"); 38}); 39app.get("/pieceprogramsettings5", (req, res) => { 40 res.render("pieceprogramsettings5"); 41}); 42app.get("/gamemodeselection", (req, res) => { 43 res.render("gamemodeselection"); 44}); 45app.get("/chengeaccountinformation", (req, res) => { 46 res.render("chengeaccountinformation"); 47}); 48app.get("/mypage", (req, res) => { 49 res.render("mypage"); 50}); 51app.get("/keep", (req, res) => { 52 res.render("keep"); 53}); 54app.get("/call", (req, res) => { 55 res.render("call"); 56}); 57app.get("/play", (req, res) => { 58 res.render("play"); 59}); 60app.get("/play1", (req, res) => { 61 res.render("play1"); 62}); 63app.get("/play2", (req, res) => { 64 res.render("play2"); 65}); 66app.get("/play_inaba", (req, res) => { 67 res.render("play_inaba"); 68}); 69app.get("/callcheck", (req, res) => { 70 res.render("callcheck"); 71}); 72app.get("/keepcheck", (req, res) => { 73 res.render("keepcheck"); 74}); 75app.get("/pieceprogramedits1", (req, res) => { 76 res.render("pieceprogramedits1"); 77}); 78app.get("/pieceprogramedits2", (req, res) => { 79 res.render("pieceprogramedits2"); 80}); 81app.get("/pieceprogramedits3", (req, res) => { 82 res.render("pieceprogramedits3"); 83}); 84app.get("/pieceprogramedits4", (req, res) => { 85 res.render("pieceprogramedits4"); 86}); 87app.get("/pieceprogramedits5", (req, res) => { 88 res.render("pieceprogramedits5"); 89}); 90app.get("/resalt", (req, res) => { 91 res.render("resalt"); 92}); 93app.get("/matching", (req, res) => { 94 res.render("matching"); 95}); 96app.get("/waitingformatching _moveplay", (req, res) => { 97 res.render("waitingformatching _moveplay"); 98}); 99app.get("/waitingformatching _room", (req, res) => { 100 res.render("waitingformatching _room"); 101}); 102app.get("/waitingformatching", (req, res) => { 103 res.render("waitingformatching"); 104}); 105 106http.listen(PORT, ()=>{ 107 console.log("server listening. Port:" + PORT); 108}); 109

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

参考にさせていただいたサイトです。
https://kazzstorage.com/websocket-reversi-dev/
https://atmarkit.itmedia.co.jp/ait/articles/1603/14/news015.html
https://blog.katsubemakito.net/nodejs/socketio/realtime-chat1
https://socket.io/docs/v4/rooms/#default-room

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

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

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

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

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

sum6

2022/01/20 15:23

何をいじったらどんなエラーが出てきますか?
mariko68311

2022/01/22 22:40

ごめんなさい、現在はまた別のプログラムを組み込もうとしてコードを変えてしまったため、その弄った時に出てきたエラー表示などを言葉で伝えることしかできません、、、一応上に書いています、でもこれじゃよくわからなかったってことだと思うので本当に申し訳ないです、、、
sum6

2022/01/23 01:44

上に載せてくれたコードには、socket.io の記述がないですね 変えたあとのものでもいいので、ここに貼ってくれたらアドバイスはできるかもです
mariko68311

2022/01/25 03:12

一部はpugファイルの遷移処理なので省くのですが、 const express = require("express"); const app = express(); const port = 3001; const server = app.listen(port); const socketio = require("socket.io"); const io = socketio(server); let clientNo = 0; io.on('connection', (socket) => { clientNo++; socket.join(Math.round(clientNo/2)); socket.emit('serverMsg', Math.round(clientNo/2)); socket.on('buttonPressed', clientRoom =>{ io.to(clientRoom).emit('switchFromServer'); }) }); と書いていて、pugファイルのscript文には、 script. const socket = io(); let clientRoom; socket.on('serverMsg', (data) => { console.log(`I should be in room No.${data}`); clientRoom = data; }); socket.on('switchFromServer', () => { //ここの処理の書き方がわからない }); turnflag.addEventListener('click', () => { socket.emit('buttonPressed', clientRoom); }); と書いています。また、コメントにしている部分にはvar文で指定したturnflagを読み込んだ時に、同じくvar文で指定したwarr,barr,a,bを呼び出す処理を書きたいと考えています。
sum6

2022/01/25 05:46

補足ありがとうございます! 素敵なゲームになりそうですね ところで、今のエラーはどんな内容が出ていますか? エラーの出ている内容をぐぐったりすると、解決しやすいです
mariko68311

2022/01/25 06:08

いえ、現状だとエラーは出ていないんです、ただルーム機能が上手く機能していないだけだとは思うんですよね、でも調べてもチャット系のものがほとんどでなかなか参考に出来ずに苦戦しています。コメント部分のルーム機能を作った後に呼び出すデータの指定をちゃんと出来れば恐らく上手くいくとは思っているんですが、確信がない上にそもそも書き方が分からないもので、、、
mariko68311

2022/01/25 07:59

追記なんですが、turnflagは var turnflag=true; と記述していて、 turnflag.addEventListener('click', () => { の指定のやり方をするときには const turnflag = document.getElementById('turnflag'); のような書き方をすると思うので、 そもそも記述が間違っているのでしょうか、 それともやり方次第でこのまま使えるのでしょうか? 前者だった場合、他の指定の仕方はどのようにするのがいいでしょうか?
guest

回答1

0

ベストアンサー

サーバーが起動した途端落ちてしまったり、プログラムの中身が表示されてしまったり

原因はたくさんありますので、今後のために、都度エラーメッセージをコピペしておいた方が良いのかもしれませんね。


確信がない上にそもそも書き方が分からないもので、、、

いきなり実際のアプリに組み込むと大変になってしまいますので、別に小さなサンプルアプリを作ってみて動きを確認してみると良いと思いました。


そもそも記述が間違っているのでしょうか、 それともやり方次第でこのまま使えるのでしょうか? 前者だった場合、他の指定の仕方はどのようにするのがいいでしょうか?

turnflagはBooleanですので、turnflag.addEventListenerと記述することはできないですね・・
turnflagのtrueとfalseを変更している処理をどこかに記述していると思いますので、そこにturnflag.addEventListenerに設定した関数の内容を記述することになるのかな?と思います。

EventTarget の addEventListener() メソッドは、特定のイベントが対象に配信されるたびに呼び出される関数を設定します。 対象としてよくあるものは Element, Document, Window ですが、イベントに対応したあらゆるオブジェクトが対象になることができます (XMLHttpRequest など)。
https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener


自分で実装してみるのが一番理解できるとは思いますが・・
room機能の最小限のサンプルを記述してみました。
実際に動かしながら動きを確認してみるのが良いのかな?と思います。

js

1// app.js 2const express = require("express") 3const { createServer } = require("http") 4const { Server } = require("socket.io") 5 6const app = express() 7const httpServer = createServer(app) 8const io = new Server(httpServer, { /* options */ }) 9const port = 3000 10 11app.set("view engine", "pug") 12 13app.get("/", (req, res) => { 14 res.render("index", { title: "Hey", message: "Hello there!" }) 15}) 16 17io.on("connection", (socket) => { 18 console.log(`connection socket.id: ${socket.id}`) 19 socket.on("join", (room) => { 20 socket.join(room) 21 console.log(`join socket.id: ${socket.id}, socket.rooms: ${JSON.stringify([...socket.rooms])}`) 22 io.to(room).emit("joined", socket.id, room) 23 }) 24}) 25 26httpServer.listen(port, () => { 27 console.log(`Example app listening on port ${port}`) 28})

pug

1//- views/index.pug 2html 3 head 4 meta(charset="utf-8") 5 title= title 6 script(src="https://cdn.socket.io/4.4.1/socket.io.min.js", integrity="sha384-fKnu0iswBIqkjxrhQCTZ7qlLHOFEgNkRmK2vaO/LbTZSXdJfAu6ewRBdwHPhBo/H", crossorigin="anonymous") 7 body 8 h1= message 9 select(name="select1", id="select1") 10 option(value="room1", selected) ルーム1 11 option(value="room2") ルーム2 12 option(value="room3") ルーム3 13 input(type="button", value="join", id="button1") 14 script. 15 window.addEventListener("DOMContentLoaded", () => { 16 const socket = io() 17 socket.on("connect", () => { 18 console.log(`connect: ${socket.id}`) 19 }) 20 socket.on("disconnect", () => { 21 console.log(`disconnect: ${socket.id}`) 22 }) 23 socket.on("joined", (socketId, room) => { 24 console.log(`joined socketId: ${socketId}, room: ${room}`) 25 }) 26 const button1 = document.querySelector("#button1") 27 button1.addEventListener("click", () => { 28 const room = document.querySelector("#select1").value 29 socket.emit("join", room) 30 }) 31 })

json

1{ 2 "name": "Sample", 3 "version": "1.0.0", 4 "description": "", 5 "main": "app.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "author": "", 10 "license": "ISC", 11 "dependencies": { 12 "express": "^4.17.2", 13 "pug": "^3.0.2", 14 "socket.io": "^4.4.1" 15 } 16}

(一連の質問が解決するまでクローズしなくて大丈夫ですよ)

投稿2022/01/31 08:51

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mariko68311

2022/01/31 14:43

わかりました、ありがとうございます!実はこの件は急いで進めることが難しくなりそうなので都度都度期間が空いてしまうかもしれません、ごめんなさい。
mariko68311

2022/02/14 02:42

お久しぶりです、サンプルを参考にした結果、room機能を実装することはできたので解決にさせていただきますね!ただ、また別の問題が出てきてしまったのでそれは再度別の質問として質問しなおそうかなと思います。
退会済みユーザー

退会済みユーザー

2022/02/14 10:12

お久しぶりです。 コメントありがとうございます。 次に進めていたようでよかったです。 別の質問も見てみましたが、すでに回答がついていたようですね。 引き続き頑張ってください。 応援してます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問