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

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

ただいまの
回答率

90.75%

  • Node.js

    1729questions

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

  • Socket.IO

    178questions

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

node.jsとsocket.ioについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 317

WBAP

score 24

dot.installでsocket.ioについての勉強をしているのですが、
サーバーに接続する際に、下記のようなエラーが出ます。

/home/vagrant/socket.io/node_modules/socket.io/node_modules/engine.io/node_modules/uws/uws.js:3
const http = require('http');
^^^^^
SyntaxError: Use of const in strict mode.
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Server.init (/home/vagrant/socket.io/node_modules/socket.io/node_modules/engine.io/lib/server.js:115:16)
    at new Server (/home/vagrant/socket.io/node_modules/socket.io/node_modules/engine.io/lib/server.js:65:8)
    at Function.attach (/home/vagrant/socket.io/node_modules/socket.io/node_modules/engine.io/lib/engine.io.js:123:16)
    at Server.initEngine (/home/vagrant/socket.io/node_modules/socket.io/lib/index.js:274:21)


調べるとnode.jsのバージョン(v0.10.48)が古くsocket.ioに対応していないために起こるエラーであるとのことでしたのでUpdateしようとしたのですが、インストールをし直しても、npmから更新をかけても、バージョンが0.10.48から更新されません。
心当り等ありましたら教えていただけませんでしょうか?

追記いたします:
OS : MacOS
npm : v 5.5.1

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • WBAP

    2017/11/14 17:24

    vagrant は MyCentOSになります。

    キャンセル

  • miyabi-sun

    2017/11/14 17:25

    CentOSと決め打ちした解答を下に用意しました、当たってましたね!(ドヤァ

    キャンセル

  • miyabi-sun

    2017/11/14 17:44

    失礼しました、ちゃんとした解答になってなかったので足しました。追記部分のOSとnpmが息してないので、vagrant内のCentOSの情報6.5あたり?とNode.js0.11、npmもバージョン1系くらいだと思うのでそれに差し替えをお願いします!

    キャンセル

回答 1

checkベストアンサー

+2

/home/vagrant/socket.io/node_modules/socket.io/node_modules/engine.io/node_modules/uws/uws.js:3
const http = require('http');
^^^^^
SyntaxError: Use of const in strict mode.

Vagrant + VirtualBoxで立ち上げた仮想マシン内のCentOSですね?
例えばMacでHomebrew等を利用してNode.jsを導入しても、
仮想マシンとは違う環境になってしまうので、Node.jsの環境は共有されません。


調べるとnode.jsのバージョン(v0.10.48)が古くsocket.ioに対応していないために起こるエラーであるとのことでした

おっしゃる通りNode.jsのバージョンが古い事が原因です。

エラーメッセージを読む限りだと…
エラーが出ているのはsocket.ioライブラリの中で発生しています。
node_modules/socket.io/node_modules/engine.io/node_modules/uws/uws.js

具体的な原因はuws.jsファイルの3行目、constを使って変数宣言していますが、
Node.jsのバージョンが古すぎてまだ未対応の書式と言っています。
つまり、そもそもNode.jsがコードの解析を諦めてエラーを出しているので実行すらしていません。


インストールをし直しても、npmから更新をかけても、バージョンが0.10.48から更新されません。

CentOSが採用しているパッケージ管理ソフト、yumはソフトのバージョンを枯れた状態に保つ事を好みます。
なのでyumのパッケージで単純にアップデートを繰り返しても、Node.jsパッケージが更新される事はありません。
ですので、質問文の状況に陥ってしまい、いくらyumをアップデートしても古いバージョンのNode.jsしかインストールされなかったわけですね。

まずは古いNode.jsは下記の記事を参考にアンインストールしましょう。
CentOS 6.xにLTS(4.3.0)のnode.jsをインストールする

おっと、インストールはまだしないでください。
Node.jsの公式サイトのダウンロードで、最新バージョンのNode.jsのインストール方法が紹介されています。


おまけ

私はnodebrewというNode.jsのバージョン管理ツールを利用しています。
ちょっと初期導入に癖がありますが、バージョンにすぐ追従出来るので便利に活用しています。
NVMといったパッケージ管理ツールもありますので、色々調べてみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/14 17:31 編集

    あ、ちょっとずれているので解答修正します。
    しばしお待ちを。。。→修正しました。

    キャンセル

  • 2017/11/14 17:46 編集

    ご回答ありがとうございます。
    constをvarに書き換えて見ましたが、やはり同じエラーが他行で出てしまいました。
    そこで一度アンインストールしようと思うのですが、ターミナル [ npm root -g ]でnode.jsのディレクトリを特定したあと、どのようにしてアンインストールすればいいのでしょうか?
    度々申し訳ありません。
    追記:申し訳ありません、npm root -gコマンドはこの件とは無関係でした。

    キャンセル

  • 2017/11/14 17:55

    回答文をアップデートしました。
    お手数ですがもう一度読んで下さい、多分これでいけると思います。

    キャンセル

  • 2017/11/14 18:41

    ご回答ありがとうございます。
    無事サーバーに接続できました。またnode.jsとsocket.ioを使用するのに必要な知識を、頂いたご回答から多く得ることができました。本当にありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Node.js

    1729questions

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

  • Socket.IO

    178questions

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