Node.js具有express和react,fs.readdir可以'找不到文件
Node.js with express and react, fs.readdir can't find files
在我的应用程序中,我使用Node.js、React和Express。我想从光盘的目录中加载图片。假设我要加载的文件位于//localhost:3000/images/own/中
(当我键入ex./localhost:3000/images/own/my_pic.jpg浏览器返回特定图片时)
我过去常常使用ajax调用:
$.ajax({
url: '/images/own',
dataType: 'text',
success: function (data){
//some actions here
}
});
但现在我得到404错误"gethttp://localhost:3000/images/own/404(找不到)'。
我知道用node加载文件通常是用fs完成的,但由于我的脚本是用babel编写的(React中需要),我不能使用require('fs')。我发现https://github.com/OptimalBits/fs.js我可以使用它(通过将它包含在我的html文件中),但当使用它时,如示例所示:
FSFactory(1024*1024, 'images/own', function(err, fs){
if(err){
console.log(err);
}
fs.readdir('/', function(err, entries){
if(err)
console.log(err);
console.log(entries);
});
});
fs对象为空,readdir返回空表。
我应该以不同的方式提供目录路径,还是有其他方式加载文件?我是node的新手,所以如果有任何帮助,我将不胜感激。
根据您的问题和评论判断,我认为您混淆了前端和后端代码。
尽管两者都是用Javascript编写的,但前端(浏览器)代码有更多的限制。其中一个限制是读取文件或目录的能力。这就解释了为什么不能使用fs
。
此外,require()
不是一个Javascript(如"语言的一部分"中所述)命令,而是Node(=后端)提供的用于加载模块的命令。因此,您也不能(直接)在浏览器中使用它。
有一些方法可以针对浏览器编写类似Node的代码,其中对require()
的调用可以转换为浏览器能够理解的内容。一种这样的方式是CCD_ 4。然而,这仍然不允许您在浏览器中运行特定的后端功能(换句话说,require('fs')
不会被翻译成任何有用的东西)。
现在,回到您的实际问题:如果您想读取服务器上包含图像文件的目录,并从中构建图像库,则需要在服务器上进行目录读取。
它可以这样工作:
- 您的前端代码将查询服务器(例如,使用AJAX调用)
- 服务器读取目录内容,将其正确格式化(例如,格式化为JSON),并将其返回到前端
- 前端获取数据并动态生成库
使用express
时,可以告诉express
您有一个目录需要通过http直接访问。
例如,如果您的公共文件有一个public
目录,您可以通过以下方式使其"可见":
app.use(express.static('public'));
因此,如果您有文件public/images/own/my_pic.jpg
,则可以通过http://localhost:3000/images/own/my_pic.jpg
唯一需要注意的是,您没有在http://localhost:3000/images/own-您需要确切地知道需要哪些文件。
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 可以't使用Appcelerator将JSON文件解析为JavaScript中的TableView
- 是否可以使用JavaScript/AAJAX在客户端创建一个文件
- 是否可以用JavaScript显示等效的文件夹对话框
- 在CodeIgniter视图中将Javascript或jQuery代码作为PHP文件编写可以吗
- 是否可以在javascript中读取IE中的本地文件
- 我可以将函数导入到typescript类文件中吗
- 为什么可以't我将数据从c#发送到asp.net中的Javascript文件
- GWT:有没有一种方法可以修改GWT在编译中使用的Cast.java文件
- 我可以访问量角器配置文件中的参数吗
- 是否可以从html中的javascript调用.vbs文件
- 是否可以缓存可下载的文件,并在XHR和非XHR请求之间共享该缓存
- 我可以设置HTML5文件上传的视频长度限制吗
- 我可以将为java创建的语法文件转换为javascript的语法文件吗
- Bootstrap CSS和JS我必须将它们包含在单独的文件中,或者可以编译它们
- 外部JS文件可以'不得执行
- 在上传之前,我可以在代码中的哪里将文件扩展名更改为小写
- 使用CloudFront和AmazonS3,或者其他CDN,我可以将所有类似的请求发送到一个静态文件中
- 是否可以从Html本地存储输出到.csv或类似文件
- 是否可以从javascript文件中将量角器作为模块运行