---
# System prepended metadata

title: Node.js
tags: [node.js]

---

###### Tags: `node.js`

#	Node.js

## 檔案系統
[參考連結](https://ithelp.ithome.com.tw/articles/10185422)
### 引入 fs
```javascript
const fs = require('fs')
```
### 非同步讀取檔案
```javascript
fs.readFile(fileName ,[options], callback)
```
fileName:路徑檔名
option:物件或字串，包含"編碼"及"flag"。這裡預設的編碼是 utf8 , flag是 "r"。
callback:帶兩個參數的function，err及file data，當我們執行readFile完成時, 要做的事

### 同步讀取檔案
```javascrit
fs.readFileSync(fileName ,[options], callback)
```

### 寫入檔案
```javascrit
fs.writeFile(fileName,data ,[options], callback)
```
fileName:路徑檔名
data: 要寫入的資料
option:物件或字串，包含"編碼"及"flag"。這裡預設的編碼是 utf8 , flag是 "w"。
callback:帶一個錯誤參數err的function，當我們執行writeFile完成時, 要做的事。例如: 寫入成功的訊息顯示；失敗時，丟出err


### 監聽檔案
[參考連結](https://juejin.cn/post/6844903617300791310)
```javascrit
fs.watch(fileName, (event, filename) => {})
```


## 打包工具 pkg
[參考連結](https://medium.com/dean-lin/%E6%8A%8A-node-js-%E5%B0%88%E6%A1%88%E6%89%93%E5%8C%85%E6%88%90%E5%9F%B7%E8%A1%8C%E6%AA%94-%E8%AE%93%E6%9C%8B%E5%8F%8B%E7%84%A1%E9%A0%88%E5%AE%89%E8%A3%9D%E7%92%B0%E5%A2%83%E5%B0%B1%E8%83%BD%E6%9A%A2%E5%BF%AB%E9%AB%94%E9%A9%97-pkg%E7%9A%84%E4%BB%8B%E7%B4%B9%E4%BB%A5%E5%8F%8A%E5%AF%A6%E9%9A%9B%E7%AF%84%E4%BE%8B%E5%88%86%E4%BA%AB-72a9a383942b)
### 安裝 
```bash
npm install -g pkg
```
### pkg指令
#### pkg -h 
顯示可用參數

#### pkg -t
目標打包給哪個系統用的(Linux, macOS and Windows)，如未設定會產生 3 個檔案
#### pkg -c
打包會參考 package.json 或是其他 json 檔案
#### pkg -o
檔案輸出名稱


## IIS架站
[參考連結-1](https://www.cnblogs.com/aieceo/p/7906640.html)
[參考連結-2](https://brooke2010.github.io/2021/03/14/window-IIS-run-nodejs/)
1. 安裝 [iisnode](https://github.com/tjanczuk/iisnode/wiki/iisnode-releases)
2. 安裝 [URL Rewrite](https://www.iis.net/downloads/microsoft/url-rewrite)
3. IIS建立站台直接指向到express專案根目錄
4. 根目錄建立 web.config
```config=
<configuration>
    <system.webServer>
        <handlers>
            <add name="iisnode" path="launch.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" />
        </handlers>

        <rewrite>
            <rules>
                <rule name="all">
                    <match url="/*" />
                    <action type="Rewrite" url="launch.js" />
                </rule>
            </rules>
        </rewrite>

        <iisnode promoteServerVars="REMOTE_ADDR" watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade"  nodeProcessCommandLine="C:\Program Files\node.exe"/> 
　　</system.webServer> 
</configuration>
```
5. 根目錄建立 launch.js
```launch.js
#!/usr/bin/env node
require('./bin/www')
```

### 注意事項
* 控制台>程式和功能>開啟或關閉Windows功能> 安裝ASP.NET 4.8跟 IIS
* 應用程式集區>新增應用程式集區
* IIS根目錄>功能委派>處理常式對應改成讀取寫入
* 若要給別人瀏覽就開本機防火牆輸入規則


