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

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

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

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

Socket.IO

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Express

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

Q&A

0回答

555閲覧

Node.js, socket.ioにおいてログインデータをwwwに送信したい

velonica74

総合スコア11

Node.js

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

Socket.IO

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Express

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

0グッド

0クリップ

投稿2021/08/08 19:29

現在Node.js、socket.ioを用いたチャットアプリの開発を行なっています。
ログイン後に入室した旨のメッセージをbroadcastさせたいのですが、
socket通信のコネクションを行なっているwwwへどのように情報を渡せばいよいかわからず困っています。

以下コードとなっています。

js

1// ~/prj/routes/users.js 2 3var express = require('express'); 4var router = express.Router(); 5var db = require('../models/index'); 6 7// ---略--- 8 9router.post('/login', (req, res, next) => { 10 db.User.findOne({ 11 where: { 12 name: req.body.name, 13 pass: req.body.pass 14 } 15 }).then(usr => { 16 if (usr != null) { 17 req.session.login = usr; 18 let back = req.session.back; 19 if (back == null){ 20 back = '/'; 21 } 22 res.redirect(back); 23 } else { 24 var data = { 25 title: 'Users/Login', 26 content: '名前かパスワードに問題があります。再度入力下さい。' 27 }; 28 res.render('users/login', data); 29 } 30 }) 31}); 32 33module.exports = router;

js

1// ~/prj/bin/www 2 3#!/usr/bin/env node 4 5/** 6 * Module dependencies. 7 */ 8 9var app = require('../app'); 10var sessionMiddleware = app.session; 11var debug = require('debug')('test:server'); 12var http = require('http'); 13 14/** 15 * Get port from environment and store in Express. 16 */ 17 18var port = normalizePort(process.env.PORT || '3000'); 19app.set('port', port); 20 21/** 22 * Create HTTP server. 23 */ 24 25var server = http.createServer(app); 26var { Server } = require("socket.io"); 27var io = new Server(server); 28 29// セッションをsocket上で使えるように 30io.use((socket, next) => { 31 sessionMiddleware(socket.request, {}, next); 32}); 33 34/** 35 * Listen on provided port, on all network interfaces. 36 */ 37 38io.on('connection', (socket) => { 39 console.log('CONNECTED!'); 40 socket.on('chat_message', (msg) => { 41 var data = { 42 message: msg, 43 name: socket.request.session.login.name 44 }; 45 io.emit('chat_message', data); 46 }); 47    // ---ここに入室メッセージイベントの発火を行いたい--- 48 // socket.on('server_to_client_broadcast', (msg) => { 49 // socket.broadcast.emit('chat message', msg); 50 // }); 51}); 52server.listen(port); 53server.on('error', onError); 54server.on('listening', onListening); 55 56/** 57 * Normalize a port into a number, string, or false. 58 */ 59 60function normalizePort(val) { 61 var port = parseInt(val, 10); 62 63 if (isNaN(port)) { 64 // named pipe 65 return val; 66 } 67 68 if (port >= 0) { 69 // port number 70 return port; 71 } 72 73 return false; 74} 75 76/** 77 * Event listener for HTTP server "error" event. 78 */ 79 80function onError(error) { 81 if (error.syscall !== 'listen') { 82 throw error; 83 } 84 85 var bind = typeof port === 'string' 86 ? 'Pipe ' + port 87 : 'Port ' + port; 88 89 // handle specific listen errors with friendly messages 90 switch (error.code) { 91 case 'EACCES': 92 console.error(bind + ' requires elevated privileges'); 93 process.exit(1); 94 break; 95 case 'EADDRINUSE': 96 console.error(bind + ' is already in use'); 97 process.exit(1); 98 break; 99 default: 100 throw error; 101 } 102} 103 104/** 105 * Event listener for HTTP server "listening" event. 106 */ 107 108function onListening() { 109 var addr = server.address(); 110 var bind = typeof addr === 'string' 111 ? 'pipe ' + addr 112 : 'port ' + addr.port; 113 debug('Listening on ' + bind); 114} 115 116

初心者質問で恐縮ですが、お力添えいただけますと幸いです。何卒よろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問