Node.js - 簡單起一個 local server 進行測試
on 2017-09-05
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 了)
使用方式
這裡只提供簡單的用法
詳細參數用法請參考 NPM 上的文件 http-server - npm
npm install http-server -g
裝在 global 後就可用在任意專案上
之後再切到專案目錄下以下指令
http-server
會看到以下訊息這就表示已經在 local 開了一個 8080 port 的 server
路徑理所當然的就是當前專案目錄的路徑
Starting up http-server, serving ./
Available on:
http://127.0.0.1:8080
http://192.168.2.187:8080
Hit CTRL-C to stop the server
當然也可指定 port 以避免跟其他服務 port 相撞
Refer - NodeJS - Setup a Simple HTTP Server / Local Web Server
Node.js - 直接執行指令
on 2016-05-25
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
結果找到了其他的範例程式碼改良後
function exec_cmd(cmd, callBack ) {
var childProcess = require('child_process');
var ls = childProcess.exec(cmd, function (error, stdout, stderr) {
if (error) {
console.log(error.stack);
console.log('Error code: '+error.code);
}
console.log('Child Process STDOUT: '+ stdout);
callBack(stdout);
});
}
這樣就行了
這似乎是因為 spawn
和 exec
的機制的問題
但查了一下, 還是不了解 spawn
和 exec
在這例子中的差別與錯誤的發生原因, 只能等有空時再來研究了…
Refer - Node.js进程通信模块child_process Refer - 说说Node.js child_process模块中的spawn和exec方法