随机头像显示

受到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 (弥天大雾)。