gpt4 book ai didi

javascript - 如何在javascript文件中使用nodeJS out

转载 作者:行者123 更新时间:2023-12-01 01:39:33 24 4
gpt4 key购买 nike

我想使用我的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 上执行此操作。

非常感谢

最佳答案

首先,我们需要建立有关浏览器和 Web 服务器的客户端/服务器关系如何工作的几个基本知识。这将为讨论解决您的问题提供一个框架。

  1. 图像不是通过 document.write() 显示在浏览器中,而是通过在文档中插入指向特定图像 URL 的图像标记来显示。

  2. 对于要从服务器获取某些结果的网页,它必须在最初从服务器获取网页时将该结果嵌入到网页中,或者网页中的 Javascript 必须请求通过 Ajax 请求从服务器获取信息。 ajax 请求是一种 http 请求,其中网页中的 Javascript 形成发送到您的服务器的 http 请求,您的服务器接收该请求并发回响应,网页中的 Javascript 接收该响应,然后可以使用该响应执行某些操作.

  3. 要实现网页从后端请求某些数据的功能,您的后端必须有一个可以响应从网页发送的 Ajax 请求的 Web 服务器。您不能仅在服务器上运行脚本并神奇地修改浏览器中显示的网页。如果没有前面几点中描述的结构类型,您的网页将根本没有与显示的服务器的连接。网页无法直接访问您的服务器文件系统,服务器也无法直接访问显示的网页。

有多种可能的方案来实现这种类型的连接。我认为最有效的方法是定义一个图像 URL,当任何浏览器请求时,它会返回服务器上特定目录中最新图像的图像。然后,您只需将该特定 URL 嵌入到您的网页中,每当刷新或显示该图像时,您的服务器就会向其发送该图像的最新版本。您的服务器可能还需要通过设置适当的缓存 header 来确保浏览器不会缓存该 URL,这样它就不会错误地只显示该图像的先前缓存版本。

网页可能如下所示:

<img src='http://mycustomdomain.com/dimages/newest'>

然后,您可以在 mycustomdomain.com 上设置一个可公开访问的 Web 服务器(从开放的互联网 - 显然您选择自己的域),该服务器可以访问所需的图像,并且您会在该 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);

关于javascript - 如何在javascript文件中使用nodeJS out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com