LoginSignup
8
12

More than 5 years have passed since last update.

ngrokをNode.jsで起動させる

Last updated at Posted at 2018-03-15

前提条件

npmとNode.jsのバージョンは以下の通りとします。

  • npm 5.6.0
  • Node.js v9.8.0

背景

npm公式サイトの、ngrokのページで「usage」を見てみると、

npm install ngrok
const ngrok = require('ngrok');
const url = await ngrok.connect();

とある。

「npm init」して、「npm install ngrok」して、「app.js」新規作成して、
素直にそのまま記載する。

app.js
const ngrok = require('ngrok');
const url = await ngrok.connect();

そして、「node app.js」で実行すると、

/Users/Hitoshi/src/ngrok-nodejs/app.js:2
const url = await ngrok.connect();
            ^^^^^

SyntaxError: await is only valid in async function
    at new Script (vm.js:51:7)
    at createScript (vm.js:136:10)
    at Object.runInThisContext (vm.js:197:10)
    at Module._compile (module.js:613:28)
    at Object.Module._extensions..js (module.js:660:10)
    at Module.load (module.js:561:32)
    at tryModuleLoad (module.js:501:12)
    at Function.Module._load (module.js:493:3)
    at Function.Module.runMain (module.js:690:10)
    at startup (bootstrap_node.js:194:16)

・・・っておい。
エラーで実行できねEEEEEEEEEE!!!!!
公式サイトなのに使い方間違ってるううううう
と思ったのは僕だけじゃないはず。

解決方法

以下のように非同期型(async)の関数でラップしてあげればOK!

app.js
const ngrok = require('ngrok');

connectNgrok().then(url => {
    console.log('URL : ' + url);
});

// ngrokを非同期で起動
async function connectNgrok() {
    let url = await ngrok.connect();
    return url;
}

async、await、thenの詳しい使い方は、以下のサイトが参考になりました。
async/await 入門(JavaScript)

実行結果

「node app.js」で実行すると、以下のように出力されます!

URL : https://xxxxxxxx.ngrok.io
8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12