受到Master随机头像的启发, 加上最近有了域名, 打算用node写一个类似的随机头像页面。
原理也不复杂, 利用node的核心库http,fs还有一些解析库, 读取文件夹中的文件内容, 随机挑选一个, 然后http->sendfile就可以了。
写完确信php真是世界上最好的语言, 同样的东西php 11行, node接近40行 (摔)。
如果配合cloudflare等cdn使用的话, 最好单独加一个page rule, 缓存策略设为bypass, 不然会有4小时的默认缓存时间, 就没有随机头像的效果了。
var fs = require('fs'),
path = require('path'),
http = require('http'),
url = require('url');
//Params
const imageDir = '/here/is/the/random/pictures/'
const imageURL = '/pic.jpg'; //The URL you want.
const servePort = 8080; //port
function getRandFile() {
var pics = fs.readdirSync(imageDir);
var randomNum = getRandomInt(pics.length);
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
console.log("The random one is: ", pics[randomNum]);
return pics[randomNum];
}
http.createServer(function (req, res) {
var pathname = url.parse(req.url).pathname;
if (pathname == imageURL) {
var randImg = imageDir + getRandFile();
res.writeHead(200, { 'Content-Type': 'image/png' });
res.end(fs.readFileSync(randImg));
} else {
res.writeHead(404, { "Content-Type": "text/plain" });
res.end("Nothing but chicken!");
}
}).listen(servePort);
console.log('Server running at http://127.0.0.1:' + servePort + '/');
试了下发现南极石是比较难出的, 大概是触发了node.js的物欲sensor (弥天大雾)。