category: nodejs

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

on 2017-09-05

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

緣由

如果要臨時起一個 local 的 server 測試前端可以考慮用 Node 的一個套件 http-server 來做

為啥有這需求呢?

可能的情境如下

  1. 原本的 localhost(127.0.0.1) 被其他服務佔用時, 且無法依附在該 localhost 底下時

  2. 當要測試的前端程式需要是有第三方 API 驗證 domain 時且在上述情境時可以用(大部分的第三方 API 或 oauth 通常允許可以設置 localhost)

PS. 假設無法設定 localhost(得設定一個真實的 domain) 也可設定 host 解決這問題(但 host 是不吃 port 的所以在第一點的情況下這方案是無法成立的

其他建議

其實還有其他我覺得不太好的方式

例如

  1. 在本地的的 Apache or Nginx 設定 RewriteRule or Path or Proxy

  2. 用最方便的 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

Read more

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);
    });
}

這樣就行了

這似乎是因為 spawnexec 的機制的問題

但查了一下, 還是不了解 spawnexec 在這例子中的差別與錯誤的發生原因, 只能等有空時再來研究了…

Refer - Node.js进程通信模块child_process Refer - 说说Node.js child_process模块中的spawn和exec方法

Read more