我想使用nodeJS的输出。这是我的代码
var fs = require('fs'); //File System
var rutaImagen = 'C:/Users/smontesc/Desktop/imagenes1/'; //Location of images
fs.readdir(rutaImagen, function(err, files) {
if (err) { throw err; }
var imageFile = getNewestFile(files, rutaImagen);
//process imageFile here or pass it to a function...
console.log(imageFile);
});
function getNewestFile(files, path) {
var out = [];
files.forEach(function(file) {
var stats = fs.statSync(path + "/" +file);
if(stats.isFile()) {
out.push({"file":file, "mtime": stats.mtime.getTime()});
}
});
out.sort(function(a,b) {
return b.mtime - a.mtime;
})
return (out.length>0) ? out[0].file : "";
}
结果是console.log(imageFile)
,我想在我的javascript项目中调用它的结果,例如
<script>
document.write(imageFile)
</script>
所有这些都是为了在目录中创建最新文件,因为我无法直接在JS上完成它。
非常感谢
答案 0 :(得分:2)
首先,我们需要建立一些有关浏览器与Web服务器的客户端/服务器关系如何工作的基本知识。然后,它将为讨论解决您的问题提供一个框架。
图像显示在浏览器中,而不是使用document.write()
,而是通过在文档中插入指向特定图像URL的图像标签来显示。
要使网页从服务器上获得某些结果,当网页最初是从服务器中获取时,它必须将结果嵌入到网页中,或者必须请求网页中的Javascript来自服务器的带有Ajax请求的信息。一个ajax请求是一个http请求,您的网页中的Javascript构成了发送到您的服务器的http请求,服务器接收了该请求并发回了响应,您的Web页面中的Javascript收到了响应,然后可以执行以下操作
要在您的网页从后端请求一些数据的情况下实现某些功能,您必须在后端具有一个Web服务器,该服务器可以响应从该网页发送的Ajax请求。您不能只在服务器上运行脚本并神奇地修改浏览器中显示的网页。如果没有前面所述的结构类型,则您的网页与显示的服务器完全没有连接。网页无法直接访问您的服务器文件系统,服务器也无法直接触摸显示的网页。
有许多可能的方案可以实现这种类型的连接。我认为最好的方法是定义一个图像URL,当任何浏览器请求该URL时,它将返回服务器中特定目录中最新图像的图像。然后,您只需将该特定的URL嵌入到您的网页中,并且每当刷新或显示该图像时,服务器就会向其发送该图像的最新版本。您的服务器可能还需要通过设置适当的缓存标头来确保浏览器不会缓存该URL,以免错误地仅显示该图像的先前缓存版本。
网页可能如下所示:
<img src='http://mycustomdomain.com/dimages/newest'>
然后,您将在mycustomdomain.com
上设置一个Web服务器,该服务器可以公开访问(可以从开放的Internet-您显然选择了自己的域),并且可以访问所需的图像,并创建一条路由在该Web服务器上,它可以回答/dimages/newest
请求。
使用Express作为您的Web服务器框架,看起来可能像这样:
const app = require('express')();
const fs = require('fs');
const util = require('util');
const readdir = util.promisify(fs.readdir);
const stat = util.promisify(fs.stat);
// middleware to use in some routes that you don't want any caching on
function nocache(req, res, next) {
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate, proxy-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
next();
}
const rutaImagen = 'C:/Users/smontesc/Desktop/imagenes1/'; //Location of images
// function to find newest image
// returns promise that resolves with the full path of the image
// or rejects with an error
async function getNewestImage(root) {
let files = await readdir(root);
let results = [];
for (f of files) {
const fullPath = root + "/" + f;
const stats = await stat(fullPath);
if (stats.isFile()) {
results.push({file: fullPath, mtime: stats.mtime.getTime()});
}
}
results.sort(function(a,b) {
return b.mtime - a.mtime;
});
return (results.length > 0) ? results[0].file : "";
}
// route for fetching that image
app.get(nocache, '/dimages/newest', function(req, res) {
getNewestImage(rutaImagen).then(img => {
res.sendFile(img, {cacheControl: false});
}).catch(err => {
console.log('getNewestImage() error', err);
res.sendStatus(500);
});
});
// start your web server
app.listen(80);
答案 1 :(得分:0)
要想在your Javascipt project
中使用 结果 ,我们绝对必须创建一个API,该API的特定路由可以响应{{1} }。然后,在Javascript项目中,您可以使用imageFile
对象或XMLHttpRequest (XHR)
与服务器进行交互以获得 结果 。
核心思想是我们绝对需要服务器端和客户端编程来执行该功能。