Edited at

ngrokをNode.jsで起動させる

More than 1 year has passed since last update.


前提条件

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