我是Node的新手,我真的被卡住了。
我正在尝试让我的网络服务器查找当前目录中的文件,并将它们作为链接显示在浏览器中,以便我可以下载它们。
然而,文件列表只是随每个请求更新,并反复显示。我不能使用任何框架或外部组件,我已经坚持了两天。我真的已经做了很多研究并尝试了很多东西但仍然无法让它发挥作用。
我将在下面添加我最后一次尝试的代码,如果有人能帮我提供一些信息,那将是非常感激的。谢谢!
var http = require("http");
var fs = require("fs");
var currentServerDir = ".";
var port = 8080;
var content = "";
var server = http.createServer(handlerRequest).listen(8080);
function handlerRequest(request, response) {
fs.readdir(currentServerDir, function getFiles(error, items) {
items.forEach(function getItems(item) {
content += "<br><a href= " + "\" " + item + "\" " + ">" + item + "</a><br>";
});
});
response.writeHead(200, {
'Content-Type': 'text/html'
});
response.write(content);
response.end();
}
编辑:
并从那里借了一些代码。现在我可以点击一个文件,但不是下载或查看它只是说“未定义”。
var http = require('http');
var content
function getFiles()
{
fs.readdir(currentServerDir, function getFiles(error, items)
{
items.forEach(function getItems(item)
{
content+= "<br><a href= " + "\" " + item + "\" " + ">" +item + "</a><br>";
});
});
}
http.createServer(function (req, res) {
var html = buildHtml(req);
res.writeHead(200, {
'Content-Type': 'text/html',
'Content-Length': html.length,
'Expires': new Date().toUTCString()
});
res.end(html);
}).listen(8080);
function buildHtml(req) {
var header = '';
var body = content;
return '<!DOCTYPE html>'
+ '<html><header>' + header + '</header><body>' + body + '</body> </html>';
};
答案 0 :(得分:1)
您的代码中存在一些问题。
getFiles()
,导致content
永远不会被填充getFiles()
,请致电content
fs.readdir()
最后仍为空。这是一个异步函数,在用于构建html页面之前无法填充content
。您可以使用作为对您的问题的评论发布的要点AlexS来修复前2个容易。第三个将需要更多的设置,但如果你使用Express,可以很容易。
答案 1 :(得分:0)
您可以将download
标记添加到HTML链接:
items.forEach(function getItems(item)
{
content+= "<br><a href= " + "\" " + item + "\" " + " download>" +item + "</a><br>";
});
答案 2 :(得分:0)