如何在node.js服务器上加载图像?

我想加载一个node.js文件的图像。 但是,当我尝试fs.readfile时,如果服务器运行后没有图像文件,则会出错。 但是,当我启动我的服务器时,图像被下载并显示并正常工作。

当我保持服务器运行,并删除图像,并尝试刷新页面,希望图像将被重新下载并显示仍然是错误的fs.readfile,因为该图像文件不存在,因为它不会重新下载,如果它被删除。

我如何去使网页dynamic,所以当我刷新本地主机:1337,图像下载每次,而不是只是当服务器启动?

这是我的代码到目前为止。

//Dilbert Comic Server var http = require('http'), fs = require('fs'), request = require('request'), url = require('url'), cheerio = require('cheerio'), request = require('request'), DilbertURL = 'http://Dilbert.com/strip/' + getDateTime(); http.createServer(function (req, res) { var img = fs.readFileSync('./Dilbert.jpg'); res.writeHead(200, {'Content-Type': 'image/gif' }); res.end(img, 'binary'); console.log('Server running at http://127.0.0.1:1337/'); }).listen(1337, '127.0.0.1'); request(DilbertURL, function (error, response, body) { var $ = cheerio.load(body); $('div.container-fluid').each(function(i, element){ var src = $('.img-responsive.img-comic').attr("src"); download(src, 'Dilbert.jpg', function() { console.log('Image downloaded'); }); }); }); var download = function(uri, filename, callback){ request.head(uri, function(err, res, body){ console.log('content-type:', res.headers['content-type']); request(uri).pipe(fs.createWriteStream(filename)).on('close', callback); }); }; function getDateTime() { var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; month = (month < 10 ? "0" : "") + month; var day = date.getDate(); day = (day < 10 ? "0" : "") + day; return year + "-" + month + "-" + day ; } 

我对Node.js非常陌生,请耐心等待。

现在你的代码的问题是,你正在下载图片所谓的全球范围,所以当Node.JS加载文件,并读取所有的代码,它看到的function,并将运行它只是一次。 要做你想做的事情(让服务器每次都下载图片),你必须把下载function放到networking服务器收到请求时执行的function中,如下所示:

 //Dilbert Comic Server var http = require('http'), fs = require('fs'), request = require('request'), url = require('url'), cheerio = require('cheerio'), DilbertURL = 'http://dilbert.com/strip/' + getDateTime(); http.createServer(function(req, res) { request(DilbertURL, function(error, response, body) { var $ = cheerio.load(body); $('div.container-fluid').each(function(i, element) { var src = $('.img-responsive.img-comic').attr("src"); download(src, 'Dilbert.jpg', function() { var img = fs.readFileSync('./Dilbert.jpg'); res.writeHead(200, { 'Content-Type': 'image/gif' }); res.end(img, 'binary'); }); }); }); }).listen(1337, '127.0.0.1', function(err){ if(err){ console.log("Failed to start web server:", err); }else{ console.log('Server running at http://127.0.0.1:1337/'); } }); var download = function(uri, filename, callback) { request.head(uri, function(err, res, body) { console.log('content-type:', res.headers['content-type']); request(uri).pipe(fs.createWriteStream(filename)).on('close', callback); }); }; function getDateTime() { var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; month = (month < 10 ? "0" : "") + month; var day = date.getDate(); day = (day < 10 ? "0" : "") + day; return year + "-" + month + "-" + day ; } 

注意:通过执行以下修改,我清理了一下代码:1)您设置了请求variables两次,所以我删除了第二个。 2)每当服务器收到请求时,您正在打印出“服务器正在运行..”string,所以当服务器启动时没有错误,我将其打印出来。

欢迎来到Node.JS!