前提・実現したいこと
現在、大学でExspressとEJSを使ったWEBアプリケーションの開発で、Socket.ioを使ってWebSocketを利用したいと思っています。
しかし、client側のGETメソッドで接続要求(var socket = io();)を出すと以下のようなエラーが出ました。
自分なりに色々調べましたが、何がいけないのかが全く分かりませんでした。
どうすれば解決するでしょうか。ご協力をお願いいたします。
参考サイト
発生している問題・エラーメッセージ
GET /socket.io/?EIO=3&tranport=polling&t=XXX 404 X.XXX ms -1033
app.js
// モジュールの読み込み
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var session = require('express-session');
var fs = require('fs');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
// オリジナルJsファイル
var client = require('./routes/client');
//Expressインスタンスの作成
var app = express();
//WebSocket
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
//WebScoket接続時
io.on('connection', function(socket) {
console.log("WebSocket接続成功!");
});
// EJSの指定
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
//ミドルウェアの追加
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}));
//ルーティングの追加
app.use('/socket.io', express.static('node_modules/socket.io-client/dist'));
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/client',client);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
routes/client.js
var express = require('express');
var router = express.Router();
//MySQL接続
var connection = require('../mysqlConnection');
router.get('/', function(req, res, next) {
res.render('client', {
title: 'XXXX'
});
});
module.exports = router;
views/client.ejs
~~省略~~
<!-- Socket.IO -->
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
</head>
~~省略~~
<script>
//Socket接続
var socket = io();
</script>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.31%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる