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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Node.js

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

Socket.IO

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

JavaScript

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Express

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

Q&A

0回答

1092閲覧

Node.jsでルーティングして割り当てられたアドレスの処理をsessionを絡めたsocket通信にしたい

velonica74

総合スコア11

Node.js

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

Socket.IO

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

JavaScript

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Express

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

0グッド

0クリップ

投稿2021/07/30 20:28

編集2021/08/08 09:46

現在Node.jsを用いたチャットアプリの開発を行なっており、ルーティングして割り当てられたアドレスの処理をsessionを絡めたsocket通信にしたいと考えています。
ですが通信やsocket.io、Node.jsそのものへの理解がまだ乏しく、次のようなエラーが出ており、解決できずにいます。

TypeError: Cannot read property 'on' of undefined at ~/prj/routes/users.js

以下に関係するコードを抜粋して記載します。

js

1// ~/prj/bin/www 2 3var app = require('../app'); 4var debug = require('debug')('hoge:server'); 5var http = require('http'); 6var sessionMiddleware = app.session; 7 8var port = normalizePort(process.env.PORT || '3000'); 9app.set('port', port); 10 11var server = http.createServer(app); 12var { Server } = require("socket.io"); 13var io = new Server(server); 14 15io.use((socket, next) => { 16 sessionMiddleware(socket.request, {}, next); 17 }); 18 19console.log(io); 20 21// io.on('connection', (socket) => { 22// socket.on('chat message', (msg) => { 23// io.emit('chat message', {value : msg.value}); 24// console.log(socket.request.session.login); 25// }); 26// socket.on('server_to_client_broadcast', (msg) => { 27// socket.broadcast.emit('chat message', msg); 28// }); 29// }); 30 31server.listen(port); 32server.on('error', onError); 33server.on('listening', onListening); 34 35// ---略--- 36 37module.exports = io;

js

1// ~/prj/app.js 2 3var express = require('express'); 4var session = require('express-session'); 5var sessionMiddleware = session({ 6 secret: 'keyboard cat', 7 resave: false, 8 saveUninitialized: false, 9 cookie: { maxAge: 60 * 60 * 1000 } 10}); 11 12var indexRouter = require('./routes/index'); 13var usersRouter = require('./routes/users'); 14 15var app = express(); 16 17app.use('/', indexRouter); 18app.use('/users', usersRouter); 19app.use(sessionMiddleware); 20app.session = sessionMiddleware; 21 22// ---略--- 23 24module.exports = app;

js

1// ~/prj/routes/users.js 2 3var express = require('express'); 4var router = express.Router(); 5var db = require('../models/index'); 6const io = require('../bin/www'); 7 8router.get('/', (req, res, next) => { 9 // エラーの該当箇所 10 io.on('connection', (socket) => { 11 socket.on('chat message', (msg) => { 12 io.emit('chat message', {value : msg.value}); 13 }); 14 socket.on('server_to_client_broadcast', (msg) => { 15 socket.broadcast.emit('chat message', msg); 16 }); 17 }); 18 console.log(io); 19 20 db.User.findAll().then(usrs => { 21 var data = { 22 title: 'Users/Index', 23 content: usrs 24 }; 25 res.render('users/index', data); 26 }); 27}); 28 29// ---略--- 30 31module.exports = router; 32

/prj/routes/users.jsのエラー該当箇所について、もともとは/prj/bin/wwwのコメントアウト部分に記載しており、この時は正常に通信ができておりました。
そこでwwwをexportし、コードを~/prj/routes/users.jsに引越しすることで、もともとできていた処理をルーティングしたアドレスにて実現を図りましたが、できませんでした。
export前後でのconsole.log(io);の出力も

[object Object]

と変わらず、解決の糸口が見えません。
おそらくエラーからioがうまく渡せていないと思うのですが、何卒お力添えいただけますと幸いです。

参考記事は以下になります。
公式ページ
Qiita

よろしくお願いします。

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

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

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

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

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

miyabi-sun

2021/07/31 03:04 編集

npmのsocket.ioモジュールのページを読んでます https://www.npmjs.com/package/socket.io io.use(fn)をやってる行、ioにuseメソッドなんて無いですよね? エラー文でも関数実行してるのに`io.use`は関数じゃないと教えてくれていますし Express.jsかなんかとごっちゃになってるように見受けられます。 ひょっとして参考になった記事があるんじゃないですか? もし何かを参考にコードを書いているなら、そのURLをお願いします。
velonica74

2021/07/31 05:51

ご回答ありがとうございます。 socket上でsessionを使いたく、こちらの記事を参考にしております。 https://qiita.com/hika7719/items/d604ed4c35cdeb2228ff また、エラーのio.useはio.onの誤りです。申し訳ありません。 何卒よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問