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

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

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

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

Socket.IO

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

Q&A

解決済

1回答

4034閲覧

Node.jsのソースコード整理について

ariel200

総合スコア33

Node.js

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

Socket.IO

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

0グッド

1クリップ

投稿2017/02/11 13:47

Node.jsバージョン:6.9.1
Socket.IOバージョン:1.5.1

Node.js初心者です。Socket.IOを使ってチャットアプリケーションを制作しています。
Socket.IO関連処理のボリュームが増えてきたため、とても見通しが悪くなってきました。

Socket.IO処理部分を目的別に外部ファイル化したいのですが、Node.jsの理解が拙いので
どのように外部ファイル化すれば良いのか分かりません。
ご教示頂けますと幸いです。

var util = require('./util.js'); var libUuid = require('uuid'); var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var mysql = require('mysql'); var conf = require('./config.json'); var db = require('./database.json'); var index = require('./routes/index'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); // MySQL設定 var connection = mysql.createConnection(db.config); app.set('socketio', io); app.set('server', server); app.get('server').listen(xxxx); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', index); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // 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'); }); // Socket.IO io.on('connection', function(client) { // 接続成功 client.emit('connected'); // 切断 client.on('disconnect', function() { // 処理... }); client.on('emit_name', function(data){ // 処理... }); /////////////////////////////// // 多数のemitに対する処理を1500行ほど記述 /////////////////////////////// function func() { // 処理... } function func2() { // 処理... } });

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

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

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

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

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

guest

回答1

0

ベストアンサー

require と module.exports を使ってファイルを分けてしまいましょう。

例えば、 // Socket.io と書かれているコメント以下の部分は別ファイルにした方がいいでしょう。

javascript

1// socketio.js というファイルにして、同じフォルダ内におく 2module.exports = () => { 3 // Socket.IO 4 io.on('connection', function(client) { 5 // 接続成功 6 client.emit('connected'); 7 8 // 切断 9 client.on('disconnect', function() { 10 // 処理... 11 }); 12 13 client.on('emit_name', function(data){ 14 // 処理... 15 }); 16 17 /////////////////////////////// 18 // 多数のemitに対する処理を1500行ほど記述 19 /////////////////////////////// 20 21 function func() { 22 // 処理... 23 } 24 25 function func2() { 26 // 処理... 27 } 28 }); 29} 30

javascript

1var util = require('./util.js'); 2var libUuid = require('uuid'); 3var express = require('express'); 4var path = require('path'); 5var favicon = require('serve-favicon'); 6var logger = require('morgan'); 7var cookieParser = require('cookie-parser'); 8var bodyParser = require('body-parser'); 9var mysql = require('mysql'); 10var conf = require('./config.json'); 11var db = require('./database.json'); 12 13var index = require('./routes/index'); 14 15var app = express(); 16var server = require('http').createServer(app); 17var io = require('socket.io')(server); 18var socketio = require('./socketio'); 19 20// MySQL設定 21var connection = mysql.createConnection(db.config); 22 23app.set('socketio', io); 24app.set('server', server); 25app.get('server').listen(xxxx); 26 27// view engine setup 28app.set('views', path.join(__dirname, 'views')); 29app.set('view engine', 'ejs'); 30 31// uncomment after placing your favicon in /public 32//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 33app.use(logger('dev')); 34app.use(bodyParser.json()); 35app.use(bodyParser.urlencoded({ extended: false })); 36app.use(cookieParser()); 37app.use(express.static(path.join(__dirname, 'public'))); 38 39app.use('/', index); 40 41// catch 404 and forward to error handler 42app.use(function(req, res, next) { 43 var err = new Error('Not Found'); 44 err.status = 404; 45 next(err); 46}); 47 48// error handler 49app.use(function(err, req, res, next) { 50 // set locals, only providing error in development 51 res.locals.message = err.message; 52 res.locals.error = req.app.get('env') === 'development' ? err : {}; 53 54 // render the error page 55 res.status(err.status || 500); 56 res.render('error'); 57}); 58 59socketio();

こんな感じで Node.js では requiremodule.exports を使って分離する事をします。詳しく知りたい場合は公式のAPIを見てみてください。

投稿2017/02/11 14:04

yosuke_furukawa

総合スコア390

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

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

ariel200

2017/02/11 14:16

早々にご回答ありがとうございます! ご回答内容でいうsocketio.jsの中身も1500行ほどあって見通しが悪いので、 そこもrequireとmodule.exportsを使って更に分離していくような理解で よろしいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問