---
# System prepended metadata

title: Node.js學習與實作
tags: [RD1]

---

# Node.js學習與實作

###### tags: `RD1`

:::spoiler 目錄
[TOC]
:::

### `Socket.io`

#### 什麼是`socket.io`?

Socket.io是一個類庫，可以在瀏覽器與服務器之間實現實時、雙向、基於事件的通信。

[socket.io](https://socket.gitbook.io/docs/)

### Docker建置現有的Node.js
[nodedock](https://nodedock.io/#/)

1. 安裝express
```
yarn add express
```
2. 並將start腳本添加到package.json：
```json
"scripts": {
  "start": "node app.js"
}
```
3. 在項目根目錄上克隆Nodedock： 
```
git clone https://github.com/nodedock/nodedock.git
```
4. 將nodedock中的beanstalkd、certbot、node和workspace等四份檔案的Dockerfile
```dockerfile
-FROM phusion/baseimage:latest
(上面這行改成下面這行)
+FROM phusion/baseimage:bionic-1.0.0
```
5. 在app.js的資料夾
```javascript
const server = require('http').createServer(app);
```
改成createServer()
```javascript
server.listen(9000,()=>{                
    console.log("server running at 127.0.0.1");       
});
```
改成server.listen(9000)
6. 在main.js的資料夾
```javascript
const url = 'http://127.0.0.1';
``` 
7. 在終端機重啟docker
```
./nodedock/restart.sh
```

### 抓取當前時間(不使用moment.js)

```javascript
time=new Date()

// 2020-10-07T01:46:56.481Z
```
#### 轉換成字串形式
```javascript
time = String(new Date()); 

// Wed Oct 07 2020 01:46:56 GMT+0000 (Coordinated Universal Time)
```
#### 更改時區
```javascript
time = new Date().toLocaleString('en-US', {
    timeZone: 'Asia/Taipei'
    }); 

// 10/7/2020, 9:46:56 AM
```
#### 擷取字串
```javascript
time = time.substr(11, 5); 
time = time.substring(11, 16); 

// 9:46
```
:::info
注意：如果沒做型態轉型成String會無法做字串處理的動作
:::

### moment.js
```
npm install moment
```
new Date()抓到現在時間,再加上自訂的時間格式
```javascript
var moment = require('moment');
moment(new Date()).format('MM-DD-YYYY');
```
#### 調整時區
[moment.js/timezone](https://momentjs.com/timezone/docs/)

```
npm install moment-timezone
```
tz後填入欲更改的時區位置
```javascript
var moment = require('moment-timezone');
moment().tz("Asia/Taipei").format();
```


### 參考資料

[Node.js 是什麼？跟 JavaScript 有什麼關係
](https://tw.alphacamp.co/blog/node-js-and-javascript)
[js字串處理](http://programmermagazine.github.io/201307/htm/article2.html)
[js日期時間](https://pjchender.github.io/2017/12/27/js-javascript-date-time-method-%E6%97%A5%E6%9C%9F%E6%99%82%E9%96%93/)

[moment.js](https://ithelp.ithome.com.tw/articles/10208995)

[Node.js - Express + MySQL](https://dotblogs.com.tw/explooosion/2016/07/18/010601)

[Docker - 容器化 Node.js express（Mac）](https://dotblogs.com.tw/explooosion/2018/09/15/194754)

[socket.io中emit和on的用法](https://www.itread01.com/content/1541081191.html)

[聊天室入門實戰（node，socket.io實現)--第一章（實現登入群聊功能）](https://blog.csdn.net/neuq_zxy/article/details/76794551)
[聊天室入门实战（node，socket.io实现)--第二章（美化，图片发送，登录提示，认证）](https://blog.csdn.net/NEUQ_zxy/article/details/76836799)
[聊天室入门实战（node,sockte.io实现）--第三章（在线成员列表及头像显示，单聊）](https://blog.csdn.net/NEUQ_zxy/article/details/76998100)

[chat](https://github.com/neuqzxy/chat)

[nodedock](https://github.com/nodedock/nodedock)
[fix](https://github.com/laradock/laradock/commit/c9819508c1bfb7abc7826fa9437f92aa3c7c7b21)

[npm mysql](https://www.npmjs.com/package/mysql)
[專題菁英班 - JavaScirpt爬蟲專案](https://hsueh-jen.gitbooks.io/webcrawler/content/)

[Redis新手指南：在node中使用redis](https://segmentfault.com/a/1190000015882650)

[《Redis入門指南》一5.4　Node.js與Redis](https://itw01.com/F2VYEJX.html)