5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node.jsで簡易サーバをつくる

Last updated at Posted at 2020-05-26

install

$ sudo apt install nodejs npm
# 実行
$ node demo.js

webserver using http module

  • Node.jsはモジュールをrequire()で呼び出す

  • createServer() メソッドを使ってWebサーバーを構築する

  • 最後にlisten()でポート番号を指定すれば「localhost:8080」にブラウザからアクセスする

  • createServer()の中身は、最低限の記述としてヘッダー情報とコンテンツを次のように記述する

  • writeHead()は、responseオブジェクトのメソッドで、ヘッダー情報をレスポンスに書き出す。第1引数にはステータスコードを指定し、第2引数にヘッダー情報を連想配列でまとめたものを指定する。

var http = require('http');
var server = http.createServer(function(request, response){
    response.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'});
    response.end('<h1><span id="hello">Hello World</span></h1>');
})
server.listen(8080);

htmlを表示するサーバ構築

  • Node.jsでファイルを扱うためのfsモジュールを使って「index.html」を読み込む
  • これを変数htmlに格納し、end()の引数に設定することでブラウザに表示できる
var http = require('http');
var html = require('fs').readFileSync('views/index.html');

var server = http.createServer(function(request,response){
    response.writeHead(200,{'Content-Type':'text/html'});
    response.end(html);
})
server.listen(8080);

Expressによるサーバ構築

var express = require('express');
var app = express();

createServer()の引数に先ほど作成したExpressのサーバーオブジェクトを設定する。

var server = require('http').createServer(app);
app.get("/", function (request, response) {
  response.sendFile(__dirname + '/views/index.html');
});
 
server.listen(8000);

GETを受信する

ブラウザからWebサイトにアクセスする時はGET通信でサーバーへリクエストを自動的に送信する。

フォームなどのデータを送信する場合はPOST通信で送る。

サーバーに来るリクエストがGET通信であるかどうかを判断するには次のように記述する。

http.createServer(function(request,response){
    response.writeHead(200,{'Content-Type':'text/html; charset=utf-8'});
    
    if(request.method == 'GET'){
        //処理
    }
})

「request.method」には、サーバーへ送られたリクエストの種類が格納される。

POSTを受信する

ブラウザからWebサイトにアクセスする時はGET通信でサーバーへリクエストを自動的に送信する。

フォームなどのデータを送信する場合はPOST通信で送る。

http.createServer(function(request, response) {
    response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
    
    if(request.method == 'POST'){
    var postData = '';
    
    request.on('data', function(chunk){
        postData += chunk;
    }).on('end',function(){
          response.end('あなたが送信したのは'+postData);
          })
	}
    
})

POSTの場合は何らかのデータが送信されているのが普通なので、このデータを受けとる処理が必要である。

request.on() の中で関数を記述し、その引数である「chunk」に送信されたデータが格納される。

続けて、on('end')イベント処理内で取得したデータを画面に表示させる。

on というメソッドは、指定のイベント処理を組み込むためのもので、第一引数にイベント名を、第2引数に組み込む処理(関数)をそれぞれ指定する。

var http = require('http');
 
var server = http.createServer();
server.on('request', doRequest);
server.listen(process.env.PORT, process.env.IP);

function doRequest(req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.write('Hello World\n');
    res.end();
}

requestというイベントにdoRequestという関数を割り当てる。
requestというのは、Serverオブジェクトがクライアントからのリクエストを受け取ったときに発生するイベントで「ブラウザからサーバーにアクセスした時のサーバー側の処理」を組み込む。

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?