未経験からのDeno入門|出力
概要
前回環境構築を行い、外部ファイルで Hello World の出力を試したかと思います。
今回は自作で Hello World と、HTTP サーバー起動してみます。
ログ出力
mkdir deno
cd deno
touch log.ts
log.js
console.log("hello world");
実行コマンドを打ち込む
deno run log.ts
HTTP リクエストの要求
Deno アプリケーションで HTTP サーバーを作成します。
Deno の公式 web サイトに、サンプルコードがあるのでそれを流用します。
helloworld.ts
import { serve } from "https://deno.land/std@0.88.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
req.respond({ body: "Hello World\\n" });
}
コード解説
Deno はローカルにコアモジュールを持ちません。 また別途インストールする必要もありません。外部から HTTP 接続するためのモジュールをインポートしています。
モジュールのインポートをするには、https://deno.land/std/http/server.tsのURLをESモジュール構文で追加します。またこのURLは常に最新のモジュールをインストールします。
import { serve } from 'https://deno.land/std/http/server.ts'
そしてコードを見ると、Node.js の構文をまったく一致しないことに気が付くかと思います。
const s = serve({ port: 8000 })
console.log('http://localhost:8000/')
for await (const req of s) {
req.respond({ body: 'Hello World\\n' })
}
server()から返却されたオブジェクトをループして、サーバからの要求に応答しています。
このコードを実行してみましょう。
deno run helloworld.ts
ネットラークエラーが出力されました。
Deno はとても安全なランタイムです。
そのため、ネットワークへのアクセス権などの【特権】を持っていません。
ネットワークアクセス権を持たせプログラムの実行を許可するために、許可フラグを与える必要があります。
deno run --allow-net helloworld.ts
これでポート 8000 でサーバーが開かれました。
以下にアクセスできるはずです。
総括
実際に起動までしてみましたが。Node.js と比べセキュリティ面で優秀さが少しでてきました。