在这种情况下,我想从我的nodejs express控制器返回内容,该控制器具有文件系统链接以在浏览器中查看日志。
当我单击此链接时,没有任何动作,它不会向我显示href链接中指定的文件路径的浏览器日志,但是如果直接在浏览器地址栏中复制该路径,则该操作同样有效。
代码:
'use strict';
var exec = require('child_process').execSync;
var fs = require('fs');
var path = require('path');
exports.list_all_tasks = function(req, res) {
var output = exec('node --version');
fs.writeFile('logs/output.log', output.toString(), function (err) {
if (err) throw err;
console.log("done");
});
res.send('<a href="file:///C:/myapp/logs/" target="_blank">Visit logs</a>');
};
当我在浏览器中单击“访问日志”时,它应该在浏览器的日志文件夹中列出所有文件,但这不起作用。如果我复制“ file:/// C:/ study / myapp / logs /”并粘贴在地址栏中,则可以在浏览器中查看所有文件。
答案 0 :(得分:0)
有些事情需要理解。
如果file:///
文件/页面在另一个系统(客户端)上打开,则将/可能找不到使用html
链接的文件。
假设您正在使用http网络服务器并在浏览器中运行此html页面,则实际上可以打开-http://host:port/your-web-page.html
或类似链接。在这种情况下,由于实现了安全性,您将无法使用file:///
链接和打开文件。您将只能通过file:///
网址打开文件链接。
由于第二点,大多数现代浏览器将不允许链接。如果您需要解决方法(虽然不建议使用),请在此处查看-Link to Local files
答案 1 :(得分:0)
要在浏览器中查看日志文件,您需要先在服务器端读取文件,然后将其发送给响应。 Example github repo
示例:
// Show list
fs.readdir(path.join(__dirname, 'logs'), (err, data) => {
if(!err && data.length > 0) {
res.setHeader('Content-type', 'text/html');
res.write('<a href="/">Back</a> </br><hr>');
res.end(
data.reduce((str, fileName) => {
str += `<a href="/logs/${fileName}">${fileName}</a></br>`
return str;
}, '')
);
} else {
res.writeHead(500);
res.end();
}
});