【问题标题】:Error while trying to read file with node js from desktop尝试从桌面使用节点 js 读取文件时出错
【发布时间】:2015-08-20 00:48:03
【问题描述】:

我使用以下代码从我的桌面读取简单文件

module.exports = function (app) {
    app.get('/aa', function(req, res) {

        fs = require('fs');
        fs.readFile('‪C:\\Users\\t56789\\Desktop\\myfile.txt', 'utf8', function (err,data) {
            if (err) {
                return console.log(err);
            }
            console.log(data);
            res.send(data);
        });

    });

当我在浏览器中点击 /aa 时出现以下错误

{ [Error: ENOENT, open 'C:\Users\t56789\WebstormProjects\Ro0.1\?C:\Users\t56789\Desktop\myfile.txt']
  errno: -4058,
  code: 'ENOENT',
  path: 'C:\Users\t56789\WebstormProjects\Ro0.1\?C:\Users\t56789\Desktop\myfile.txt' }

如果我返回 res.send("test") 我可以在浏览器测试中看到... 知道我在这里想念什么吗?

【问题讨论】:

  • 您正在运行一个网络服务器。 web服务器的根目录就是它运行所在的目录,不能直接读取C:盘。您只能读取该根目录中的内容。
  • @JeremyThille-运行 Web 服务器(快递?)是什么意思,如果有其他方法可以做到吗?我对nodeJS相当陌生...
  • 嗯,NodeJS 是一个 Web 服务器……就像 Apache。如果从c:/myWebsite 运行它,Node 将只能读取c:/myWebsite 中的内容。只有您网站的文件,而不是整个磁盘。除非我弄错了。
  • 使用路径模块根据您的操作系统要求规范化路径。并阅读这篇文章:shapeshed.com/writing-cross-platform-node
  • 我想是的。因为网络服务器不能拒绝你访问上面的文件(它是文件系统工作)它是根目录,特别是如果你正在使用你的用户已经是根目录的窗口(:

标签: javascript jquery node.js express


【解决方案1】:

由于安全原因,网络服务器仅限于当前目录。因此,如果您想访问某个文件,请先将其移动到 Web 服务器的目录。只是为了证明这个概念,你可以试试这个代码:

app.get('/aa', function (req, res) {
    var fs = require('fs');
    fs.readFile(__filename, 'utf8', function (err, data) {
        if (err) {
            return console.log(err);
        }
        console.log(data);
        res.send(data);
    });
});

它将显示代码所在文件的内容。

【讨论】:

  • 谢谢,但我应该在哪里配置 __filename ?
  • __filename 是 Node.js 默认变量,始终显示当前文件路径。不是你做配置。你可以阅读更多关于nodejs.org/api/fs.htmlnodejs.org/api/path.html
  • 文件不可能在桌面上,您必须手动复制/移动网络服务器目录中的文件。
猜你喜欢
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
相关资源
最近更新 更多