node.js
はChrome
のv8
エンジンに基づいてjs
コードを実行するため、ブラウザ環境を取り除き、次のようなjs
コードをコンソールで直接実行できますhello world
code
console.log('hello world');
コンソールのnode
を使用して直接実行できます。
http
createServer
node.js
モジュールhttp
は、 CommonJS
仕様に基づいて、 http
モジュールhttp
require
して使用できます。 http
を作成できるモジュール。サーバーはコールバック関数をパラメータとして受け取ります。このコールバック関数は、 request
とresponse
2 つのパラメータを受け取ります。
request
は、 url
、リクエストheader
、リクエスト メソッドなど、クライアントによって要求されたすべての情報が含まれます。応答response
主に、応答本文に関連するいくつかの操作をカプセル化するために使用されます。たとえば、 response.writeHead
本文のヘッダー情報とステータス コードを処理後に
カスタマイズできます。createServer
関数を使用すると、 response.end()
本文をクライアントに送信できますが、 Server
オブジェクトをリッスンできるようにする必要はありません。リッスンするserver
オブジェクトのlisten
メソッド。実際にサーバーとして listen メソッドの実行を開始できます
listen
最初のパラメーターはリスニング ポート番号、2 番目のパラメーターはバインドされたホストip
、3 番目のパラメーターはコールバック関数です。例外
http
処理することができます。http
モジュールを使用して単純なサーバーを作成します。
const { createServer } = require('http' ); const HOST = 'ローカルホスト'; const ポート = '8080'; const server = createServer((req, resp) => { // 最初のパラメータは返されるステータスコードです // 2 番目のパラメータは応答ヘッダー情報です resp.writeHead(200, { 'Content-Type': 'text/plain' }); console.log('サーバーは動作しています...'); // end メソッドを呼び出して、リクエストが満たされたことをサーバーに通知します resp.end('こんにちは、nodejs http サーバー'); }); server.listen(PORT, HOST, (エラー) => { if (エラー) { console.log('何か間違っています: ', エラー); 戻る; } console.log(`サーバーは http://${HOST}:${PORT} でリッスンしています ...`); });
node
を使用して直接実行して、独自のサーバーを作成してみることもできます。サーバーが実行されたら、ブラウザは http://localhost:8080 にアクセスしてサーバーにアクセスできます。
npm i -g nodemon を
nodemon
実行する必要がなくなります
直接使用できるように、グローバルにインストールすることをお勧めします
。npx nodemon
これも非常に簡単で、 node
コマンドをnodemon
コマンド
nodemon http-server.jsに変更するだけです。
。以前にcreateServer
とresp
オブジェクトを使用したときは、いつでも公式node
ドキュメントに従って確認する必要がありましたが、問題ありません。
ファイルは、構文プロンプト機能を提供するのに役立ちます。開発にはts
ts
を使用していませんが、
npm init -y
@types/node
-- pnpm i @types/node -D
jsconfig.json
ファイルを作成し、 node_modules
を除外します。チェックする必要はありません。{ "compilerOptions": { "checkJs": true }、 "除外": ["node_modules", "**/node_modules/*"]
上記のコードに実際にはエラーがあることに気づいたでしょうか
?
checkJs
型エラーのチェックに役立ちます。チェックをオンにすると、すぐにパラメーターの型の不一致についてのメッセージが表示されます。
このとき、 listen
メソッドの上にマウスを置くと、メソッドのシグネチャが表示されます。
ご覧のとおり、元のport
パラメータは、 number
型である必要がありますが、定義したときはstring
型であったため、一致しませんでした。これをnumber
の8080
に変更するだけで、関連するapi
ドキュメントを直接表示できます。公式node
を開かずにドキュメントを見つけて確認するのに長い時間がかかりました。
。単純なhttp server
では 1 つの文しか返されませんでしたが、複数の文を返すことは可能ですか? これには、 resp
オブジェクトのwrite
メソッドを使用する必要があります。代わりに、 write
メソッドを使用して、 end
end
回呼び出すだけで済みます。パラメータを渡す場合は、応答本文の送信機能のみを完了させてください。
const { createServer } = require("http"); const HOST = "ローカルホスト"; const ポート = 8080; const server = createServer((req, resp) => { resp.writeHead(200, { "Content-Type": "text/plain" }); console.log("サーバーは動作しています..."); // いくつかのローレム文を書きます resp.write("Lorem ipsum dolor sit amet consectetur adipisicing elit.n"); resp.write("オムニス エリゲンディ アペリアム デレクトゥス?n"); resp.write("ああ、大丈夫!n"); resp.end(); }); server.listen(PORT, HOST, (エラー) => { if (エラー) { console.log("何か間違っています: ", エラー); 戻る; } console.log(`サーバーは http://${HOST}:${PORT} でリッスンしています ...`); });
今回は3つの文を書きましたが、結果は次のようになります。
文字列をブラウザに返すだけでなく、 html
ファイルのコンテンツを直接読み取ってブラウザに返すこともできます。これには、別のNode.js
組み込みモジュールを使用する必要があります。 fs
、このモジュールはファイル操作の機能を提供します。 fs.readFile
使用してファイルを非同期に読み取ることができますが、 promise
オブジェクトは返されないため、ファイルの読み取り後に操作を処理するためにコールバックを渡す必要があります。ファイル読み取りを同期的にブロックすることもできますfs.readFileSync
ここでは、非同期読み取り
const { createServer } = require("http");を選択します。
const fs = require("fs"); const HOST = "ローカルホスト"; const PORT = 8080;const server = createServer((req, resp) => { // MIME タイプを text/plain から text/html に変更します resp.writeHead(200, { "Content-Type": "text/html" }); // HTMLファイルの内容を読み込む fs.readFile("index.html", (err, data) => { if (エラー) { コンソール.エラー( "HTML ファイルのコンテンツの読み取り中にエラーが発生しました: ", エラー ); エラーをスローします。 } console.log("操作は成功しました!"); resp.write(データ); resp.end(); }); }); server.listen(PORT, HOST, (エラー) => { if (エラー) { console.log("何か間違っています: ", エラー); 戻る; } console.log(`サーバーは http://${HOST}:${PORT} でリッスンしています ...`); });
現在の結果は次のとおりです。
html
注: ここでは、応答ヘッダーの**Content-Type**
を**text/html**
に変更して、 **html**
ファイルのコンテンツを返すことをブラウザーに通知する必要があります。 **text/plain**
を引き続き使用する場合、ブラウザは返されたコンテンツを解析しません。たとえ**html**
構文に準拠していても、次のように解析されません。
インターフェイス データを返すことだけを担当するバックエンド サーバーを作成する必要がある場合、あなたは賢明で、その処理方法を知っていると思いますjson
MIME
をapplication/json
に設定しますapplication/json
resp.write
、 json
文字列が渡されます。 JSON.stringify
使用してオブジェクトを処理し、const { createServer } = require("http");を返すことができます。
const HOST = "ローカルホスト"; const ポート = 8080; const server = createServer((req, resp) => { // MIME タイプを application/json に変更します resp.writeHead(200, { "Content-Type": "application/json" }); // オブジェクトを使用して json データを作成します const jsonDataObj = { コード: 0、 メッセージ: 「成功」、 データ: { 名前:「粘土」、 年齢:20歳、 趣味:「コーディング」、 }、 }; resp.write(JSON.stringify(jsonDataObj)); resp.end(); }); server.listen(PORT, HOST, (エラー) => { if (エラー) { console.log("何か間違っています: ", エラー); 戻る; } console.log(`サーバーは http://${HOST}:${PORT} でリッスンしています ...`); 結果
は次のとおりです。
PDF ファイルを返すという考え方は、以前のhtml
ファイルを返すという考え方に似ていますが、どちらも応答ヘッダーのMIME
タイプを設定し、ファイルを読み取り、ファイルの内容を返すというプロセスです。私たちの考えは、サーバーの実行中に実行することです。PDF pdf
を生成するには、 MIME
タイプをapplication/pdf
に変更する必要がありますpdf
pdfkit
。
pnpm i pdfkit
まず、 pdf
ファイルを作成する関数を作成しますpdf
ファイルの作成にはいくつかの書き込み操作も必要です。いつ完了するかはわかりませんが、リクエストはpdf
ファイルが作成されるまで待つ必要があります。応答を取得するので、それを非同期にしてpromise
返す必要があります
/** * @description PDF ファイルを作成 */const createPdf = () => { return new Promise((解決、拒否) => { if (!fs.existsSync("example.pdf")) { // PDFDocument オブジェクトを作成します const doc = 新しい PDFDocument(); // PDF コンテンツをパイプして書き込みストリームを作成します。 doc.pipe(fs.createWriteStream("example.pdf")); // PDF ドキュメントにコンテンツを追加します doc.fontSize(16).text("Hello PDF", 100, 100); // PDF ファイルの生成操作を完了します。 doc.end(); } 解決(「成功」); });ここでは
、
パイプライン操作を使用して、 PDFDocument
オブジェクトの内容をパイプラインを通じて新しく作成された書き込みストリームに転送します。操作が完了すると、 pdf
ファイルが作成されたことをresovle
を通じて外部に通知し、
const を呼び出します。
サーバーコード内のサーバー = createServer(async (req, resp) => { // MIME タイプを application/pdf に変更します resp.writeHead(200, { "Content-Type": "application/pdf" }); // PDFファイルを作成する createPdf() を待ちます; // 作成したPDFファイルを読み込む fs.readFile("example.pdf", (err, data) => { if (エラー) { コンソール.エラー( "PDF ファイルのコンテンツの読み取り中にエラーが発生しました: ", エラー ); エラーをスローします。 } console.log("操作は成功しました!"); resp.end(データ); }); }); server.listen(PORT, HOST, (エラー) => { if (エラー) { console.log("何か間違っています: ", エラー); 戻る; } console.log(`サーバーは http://${HOST}:${PORT} でリッスンしています ...`); });
これで、作成されたpdf
ファイルをブラウザで読み取れるようになります。
同じです。オーディオ ファイルを読み取り、それをパイプライン経由でresp
オブジェクトに送信して返します。
const { createServer } = require("http"); const { stat, createReadStream } = require("fs"); const HOST = "ローカルホスト"; const ポート = 8080; const サーバー = createServer((req, resp) => { // MIME タイプを audio/mpe に変更します resp.writeHead(200, { "Content-Type": "audio/mp3" }); const mp3FileName = "audio.mp3"; stat(mp3ファイル名, (err, 統計) => { if (stats.isFile()) { const rs = createReadStream(mp3FileName); // 読み取りストリームを resp にパイプします rs.pipe(それぞれ); } それ以外 { resp.end("mp3 ファイルが存在しません"); } }); }); server.listen(PORT, HOST, (エラー) => { if (エラー) { console.log("何か間違っています: ", エラー); 戻る; } console.log(`サーバーは http://${HOST}:${PORT} でリッスンしています ...`); });
効果は次のとおりです。
開くと、オーディオを再生するためのインターフェイスが表示されます。これは、 chrome
によって提供されるオーディオ ファイルの表示です。コンソールを開くと、オーディオ ファイルが返されていることがわかります。
注: オーディオ ファイル ストリームをパイプ経由で**resp**
に渡した後、 **resp.end()**
メソッドを呼び出す必要はありません。これにより、応答全体が閉じられ、オーディオ ファイルが利用できません。
とオーディオ ファイルの処理は同じですが、 MIME
タイプをvideo/mp4
に変更する必要がある点が異なります。
const { createServer } = require("http"); const { stat, createReadStream } = require("fs"); const HOST = "ローカルホスト"; const ポート = 8080; const server = createServer((req, resp) => { // MIME タイプを audio/mpe に変更します resp.writeHead(200, { "Content-Type": "audio/mp4" }); const mp4FileName = "ビデオ.mp4"; stat(mp4ファイル名, (err, 統計) => { if (stats.isFile()) { const rs = createReadStream(mp4FileName); // 読み取りストリームを resp にパイプします rs.pipe(それぞれ); } それ以外 { resp.end("mp4 ファイルが存在しません"); } }); }); server.listen(PORT, HOST, (エラー) => { if (エラー) { console.log("何か間違っています: ", エラー); 戻る; } console.log(`サーバーは http://${HOST}:${PORT} でリッスンしています ...`); });
Node
使用してhttp
サーバーを作成しjs
html
JSON
pdf
ファイルを生成して返す方法学びました
。内容は簡単ですが、見るだけでは難しいと思わないでください。知っているという意味ではなく、実際に実装して初めて自分自身の問題が見つかります。