前提条件
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