// http.js
const http = require('http');
const fs = require('fs');
const objHtml = {'Content-Type' : 'text/html;charset=utf-8'};
const uService = (req, reply) => {
const filename = (req.url == '/') ? './index.html' : `.${req.url}`;
if (! fs.existsSync(filename)) {// console.log(filename);
reply.writeHead(404, objHtml);
reply.write('<!DOCTYPE html><html><body>Not Found<body></html>');
reply.end();
return;
}
const mimeType = filename.endsWith('.html') ? objHtml :
filename.endsWith('.css') ? {'Content-Type' : 'text/css'} :
filename.endsWith('.js') ? {'Content-Type' : 'application/javascript'} :
{'Content-Type' : 'application/octet-stream'};
reply.writeHead(200, mimeType);
fs.createReadStream(filename).pipe(reply);
}
const port = 8080;
console.log(`http://0.0.0.0:${port}/`);
http.createServer(uService).listen(port);
使用 nodejs 來跑: node http.js, 並用瀏覽器瀏覽網址 http://127.0.0.1:8080/index.html
改用 dart 語言來寫:
// http.dart
import 'dart:io';
final objHtml = ContentType('text', 'html', charset: 'UTF-8');
final uService = (HttpRequest req) {
final reply = req.response;
final filename = (req.uri.path == '/') ? './index.html' : '.${req.uri.path}';
final file = File(filename);
if (! file.existsSync()) {
reply .. statusCode = 404 ..
headers.contentType = objHtml ..
write('<!DOCTYPE html><html><body>Not Found<body></html>') ..
close();
return;
}
reply .. statusCode = 200 ..
headers.contentType = RegExp(r'(\.htm|\.html)$').hasMatch(filename) ? objHtml :
RegExp(r'\.css$').hasMatch(filename) ? ContentType('text', 'css') :
RegExp(r'\.js$').hasMatch(filename) ? ContentType('application', 'javascript') :
ContentType('application', 'octet-stream') ..
headers.contentLength = file.lengthSync();
file.openRead().pipe(reply);
};
main() {
final port = 8080;
print("http://0.0.0.0:${port}/");
HttpServer.bind(InternetAddress.anyIPv4, port).then((http)=>http.listen(uService));
}
使用 dart 來跑: dart http.dart, 並用瀏覽器瀏覽網址 http://127.0.0.1:8080/index.html
2022年11月23日 星期三
20 幾行的 http 伺服器(node js)
訂閱:
張貼留言 (Atom)
使用 pcie 轉接器連接 nvme SSD
之前 AM4 主機板使用 pcie ssd, 但主機板故障了沒辦法上網, 只好翻出以前買的 FM2 舊主機板, 想辦法讓老主機復活, 但舊主機板沒有 nvme 的界面, 因此上網買了 pcie 轉接器用來連接 nvme ssd, 遺憾的是 grub2 bootloader 無法識...
-
市面上便宜的時鐘, 內部機芯大多使用晶體振盪器產生固定頻率的脈沖去驅動 Lavet-type 步進馬達, 它只要一個 1.5V 電池就足以推動, 而馬達扭力主要是靠線圈內的電流產生磁力所致, 因此電流才是動力來源. 電壓太高會造成線圈電流飽和導致發熱,可能影響震盪頻率甚至燒毀...
-
參考資料: https://developer.android.com/training/connect-devices-wirelessly/nsd linux mint 上針對區域網路的名稱服務協定可以使用 avahi, 透過 avahi-browse -a -r 就能...
沒有留言:
張貼留言