2013年12月5日 星期四

Node.js建立web service時如何動態指定port

如果我們的web service有可能要占用不同的port而又不希望每次都要改動程式,
我們可以透過外部環境變數來動態改變要占用的port!
如果要可以動態指定,不指定時又有一個預設的port呢?
下面就是這樣的範例(重點在最後一行):

var http = require('http');
http.createServer(function(req,res)
{
res.writeHead(200,{'Content-Type':'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Hello world</p>');
}).listen(process.env.PORT || 80);

所以當你希望他佔住8080 port時:
PORT=8080 node myweb.js
當你希望它使用預設的80 port時(不是管理員身份請記得sudo):
node myweb.js

Node.js建立web service時如何聽80 port?

以下是一個小小的Node.js web service範例:

var http = require('http');
http.createServer(function(req,res)
{
res.writeHead(200,{'Content-Type':'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Hello world</p>');
}).listen(80);

如果我們將他存檔成myweb.js然後執行時,會發生錯誤,但是如果我們將最後一行的
listen(80) 改成 listen(8080) 那就可以正確執行無誤了!

當然以我們的水準絕對不用考慮到是不是犯了80已經被其他web service佔住的錯!

其實只要實驗過就知道,並不是只有80 port 不行,聰明的你看到這邊是不是已經猜到只要是小於1024的port都不行呢?Exactly!只要是小於1024的系統保留port都會出問題~所以這根本就不是Node.js的問題,是我們應該要以系統管理員的身份來執行它:

sudo node myweb.js


2013年12月4日 星期三

innerHtml問題面面觀

innerHtml 是一個非常好用的DOM屬性
但是有一些情況它產生出來的問題超級可怕!!因為根本沒辦法Debug!
現在就兩個狀況敘述一下:
1.Ajax回來的資料顯示不出來:檢查是否有DIV包在外面,或是看看DIV跟Table,TR,TD之間的關係,調整一下應該就可以了。
2.Form裡面的資料innerHtml改過後變數無法submit過去目標網頁,這個超離奇的,沒改過時就可以,一改過就不行了!而且只有被改的欄位有影響,沒被改的欄位仍然正常!目前發現的是在一個table中包了超過一個form就不行!後來改成form包在table外面就解決了,不確定是不能table包在form外面還是不能一個table中包了超過一個form。反正form包在table外面確定是可以的了!