官方網站:https://nodejs.org/

簡介

Node.js是一個開放原始碼、跨平台的、可用於伺服器端和網路應用的執行環境。Node.js應用JavaScript語言寫成,在Node.js執行時執行。

技術特性

  • Node.js以單執行緒執行,使用非阻塞I/O呼叫,這樣既可以支援數以萬計的並行連線,又不會因多執行緒本身的特點而帶來麻煩。
  • Node.js將其註冊到作業系統中,這樣可以及時注意到新連線的產生。
  • 與其他伺服器程式不同的是,Node.js不使用行程或執行緒處理連線,而是採用事件迴圈來處理並行連線。

基本程式範例

參考資料:https://zh.wikipedia.org/wiki/Node.js

用Node.js撰寫的HTTP Server版hello world範例:

var http = require('http');
http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8000);

console.log('Server running at http://127.0.0.1:8000/');

另一個簡單的TCP伺服器範例,監聽(Listening)埠7000並輸出 (echo)之前輸入的訊息:

var net = require('net');
net.createServer(function (stream) {
    stream.write('hello\r\n');

    stream.on('end', function () {
        stream.end('goodbye\r\n');
    });

    stream.pipe(stream);
}).listen(7000);

處理CORS連線

參考資料:

/*jslint nodejs: true*/
'use strict';
var express = require('express')
  , cors = require('cors')
  , port = process.env.PORT || 3000
  , app = express();

app.use(cors());

app.get('/products/:id', function(req, res, next){
  res.json({msg: 'This is CORS-enabled for all origins!'});
});

app.listen(port, function(){
  console.log('CORS-enabled web server listening on port ' + port);
}); 

檢查檔案是否存在

參考資料:Check synchronously if file/directory exists in Node.js 使用node.js的API:fs.access 注意!使用此方法時,若被檢查的檔案不存在,將回傳error,適合用在你期待該檔案必須存在時

var fs = require('fs');
try {
    fs.accessSync(path, fs.F_OK);
    // Do something
} catch (e) {
    // It isn't accessible
}
// Or
fs.access(path, fs.F_OK, function(err) {
    if (!err) {
        // Do something
    } else {
        // It isn't accessible
    }
});

背景執行

參考資料:node.js as a background service

推薦的解決方案:

Linux 解法:Linix系統幾乎都內建systemd,擁有處理各項任務的能力,這讓你不再需要forevermonit等額外的程式來控制node程式

步驟:

1.建立myapp.service檔案(可以將myapp替換成你想要的名稱)

2.內容包含如下:

[Unit]
Description=My app

[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp

[Install]
WantedBy=multi-user.target

3.將檔案複製至/etc/systemd/system

4.Start it with systemctl start myapp.

5.Enable it to run on boot with systemctl enable myapp.

6.See logs with journalctl -u myapp

More details at: How we deploy node apps on Linux, 2016 edition


參考資料:


Poy Chang

Trial and Error