---
# System prepended metadata

title: NodeJS
tags: [lecture]

---

---
tags: lecture
---

# NodeJS

## 前言：伺服端網站程式設計(the server side)

### 靜態 vs 動態
- 靜態網路伺服器（static web server）：之所以稱為「靜態」是因為伺服器只會給你的瀏覽器，傳送「事先寫好的」（as-is）檔案。
- 動態網路伺服器（dynamic web server）：之所以稱為「動態」是因為伺服器會處理內容、甚至從資料庫即時產生內容，再傳送到瀏覽器。

動態網站可以針對 HTTP 請求，發送客製化的資訊。大多數主流網站會使用伺服端技術，以根據需要呈現動態資料。

![](https://i.imgur.com/QDj4ATV.png)

![](https://i.imgur.com/zxqi7tR.png)

### 能做到什麼
- 客製化的使用者體驗
- 控制內容存取
- 儲存session/state資訊
- 提醒與溝通
- ...

伺服器端程式碼主要任務就是在控制**哪些資訊**要發送給使用者（而用戶端程式碼主要掌握資料的結構與呈現給使用者）


## Introduction
Node (或者說Node.js) 是一個開源、跨平台和允許開發者使用Javascript創造伺服器端工具和應用的執行環境。

```javascript=
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
```