官方網站:https://nodejs.org/
簡介
Node.js 是一個開放原始碼、跨平台的、可用於伺服器端和網路應用的執行環境。Node.js 應用 JavaScript 語言寫成,在 Node.js 執行時執行。
技術特性
- Node.js 以單執行緒執行,使用非阻塞 I/O 呼叫,這樣既可以支援數以萬計的並行連線,又不會因多執行緒本身的特點而帶來麻煩。
- Node.js 將其註冊到作業系統中,這樣可以及時注意到新連線的產生。
- 與其他伺服器程式不同的是,Node.js 不使用行程或執行緒處理連線,而是採用事件迴圈來處理並行連線。
設定 npm init 預設值
npm 會使用你家目錄下的 ~/.npmrc
檔案內容作為預設初始化的設定,你也可以使用 npm config
指令來設定,如下:
npm config set init-author-name "Poy Chang"
npm config set init-license "MIT"
初始化 npm 專案請使用 npm init
,若想要全部套用預設值,可使用 npm -y
指令。
REF:Change Default NPM License
基本程式範例
參考資料: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 連線
參考資料:
- expressjs/cors套件
- client 範例程式碼:node-cors-client
- server 範例程式碼:node-cors-server
- 使用 JQuery 演示 CORS 之 DEMO 網頁:What happens without 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
,擁有處理各項任務的能力,這讓你不再需要forever
、monit
等額外的程式來控制 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
參考資料: