Skip to main content

Tedshd's Dev note

Category: Nodejs

在 cloud functions 或是 firebase functions 處理 nodejs 使用 import 的方式

# Intro 現在在使用 nodejs 時可以使用副檔名 .mjs 的方式和 package.js 添加 "type": "module" 來使用 import 來取代 require 關於這件事也是因為有許多歷史因素無法完全取代掉 require 但是如果我們想要在 cloud functions 或是 firebase functions 使用時就沒那麼順利 因為光是要使用 .mjs 就是個問題 但是參考下面的文章後發現有取巧的方式 refer - ES6+ in Cloud Functions for Firebase #2 # Solution 先說結論 其實就是先用 babel build 完 code 最後把 build 完的 code 部署到 functions 上面 以 firebase functions 專案的例子 我自己的做法是 多建立一個 src 的目錄來當成再開發的 code 在部署前 build 到 functions 的目錄 package.json 添加 "scripts": { "build": "babel src --out-dir functions" } npm run build ...

Node PM2 使用紀錄

# 介紹 PM2 是一個可以方便處理 node process 的工具 大多用於線上環境 這邊主要紀錄 PM2 的一些用法與指令 # 基本使用 可以參考官方文件 PM2 Process Management Quick Start 安裝 npm install pm2 -g 啟動 pm2 start <要啟動的 js> 通常建議啟動時的指令搭配以下參數(更多參數請詳閱文件) # Specify an app name --name <app_name> # Watch and Restart app when files change --watch # Set memory threshold for app reload --max-memory-restart <200MB> # Specify log file --log <log_path> # 重新載入 pm2 reload <要重啟的 app> 大多用於程式部署更新後, 有較好的體驗(和 restart 相比) ...

HTML form submit same name in php, nodejs, golang

一直以來大部分時間都在用 PHP 開發 所以也用 PHP 來處理 HTML Form 所以都下意識地認為 <input type="checkbox" name="game[]" value="FGO"> 這樣的 name="game[]" 的處理方式是正規的處理 HTML Form 的多選的方式 也疑惑為何大多的 HTML Form 的教學甚至 MDN 都沒有提到這件事 就在某一天我在檢視到同事寫的 code 時 發現同事用 JavaScript 處理 硬爬出來自己組字串送出去 我才想起這令人感到恐懼的事情 因為公司同事是寫 golang 的專門, 就算前端不熟 應該也不至於連這樣概念都沒有就用硬爬的方式處理 所以再調整的同時也跟同事確認後 我也真正的直視這問題 到底要怎麼處理表單中多選的資料? PHP 寫久的人大多都知道要用上面列出的方法 name="game[]" 就是 game + [] 但是當我認真地尋找關於這個問題時 意外地發現了一篇 stackoverflow 的問答 Several Checkboxes sharing the same name 其實 W3C 根本沒有管你 name="" 重複要如何處理 以下是 PHP, nodejs, golang 的原生方式來測試的結果 # PHP 以下問答有提供了 PHP doc 說明 PHP 如何處理多選 ...

Node.js - 簡單起一個 local server 進行測試

# Node.js - 簡單起一個 local server 進行測試 # 緣由 如果要臨時起一個 local 的 server 測試前端可以考慮用 Node 的一個套件 http-server 來做 為啥有這需求呢? 可能的情境如下 原本的 localhost(127.0.0.1) 被其他服務佔用時, 且無法依附在該 localhost 底下時 當要測試的前端程式需要是有第三方 API 驗證 domain 時且在上述情境時可以用(大部分的第三方 API 或 oauth 通常允許可以設置 localhost) PS. 假設無法設定 localhost(得設定一個真實的 domain) 也可設定 host 解決這問題(但 host 是不吃 port 的所以在第一點的情況下這方案是無法成立的 # 其他建議 其實還有其他我覺得不太好的方式 例如 在本地的的 Apache or Nginx 設定 RewriteRule or Path or Proxy 用最方便的 file 方式打開(但如果有用到第三方服務需要 domain 驗證的就 GG 了) # 使用方式 這裡只提供簡單的用法 ...

Node.js - 直接執行指令

# Node.js - 直接執行指令 因為最近要用 nodejs 做一些事, 所以就趕鴨子上架的先把功能做出來再說 然後就立馬遇到問題了… 在 PHP 中要直接執行 command line 是使用 exec 因為之前都用 PHP 寫 Shell Scripts 所以找了一下用 nodejs 要如何寫 先是找到了以下的 code function run_cmd(cmd, args, callBack ) { var spawn = require('child_process').spawn; var child = spawn(cmd, args); var resp = ""; child.stdout.on('data', function (buffer) { resp += buffer.toString(); }); child.stdout.on('end', function() { callBack (resp); }); } // example run_cmd( "ls", ["-l"], function(text) { console.log (text) ; }); 但是發現如果是要用像是 mkdir 或者要 run shell 就會出 ENOENT 的 error ...