我正在尝试获取 SPA 静态应用程序的“资产/插图”目录中所有文件的列表,作为要在我的 Vuex 商店中重新使用的 JSON 对象
资产/插图目录结构是:
assets
illustrations
ill-1
prop-1-1.jpg
prop-1_2.jpg
ill-2
prop-2-1.jpg
prop-2_2.jpg
ill-3
prop-3-1.jpg
prop-3_2.jpg
Run Code Online (Sandbox Code Playgroud)
我的目标是拥有这样的对象:
{ illustrations: [ill-1: [prop-1-1.jpg, prop-1_2.jpg], ill-2: [prop-2-1.jpg, prop-2_2.jpg], ill-3: [prop-3-1.jpg, prop-3_2.jpg]] }
Run Code Online (Sandbox Code Playgroud)
在我的 App.vue 中,当应用程序组件被挂载时,我会触发一个方法 getIllustrations()
<script>
export default {
name: 'app',
data () {
return {}
},
methods: {
getIllustrations () {
const path = require('path')
const fs = require('fs')
fs.readdir(path.join(__dirname, 'assets/illustrations'), (err, items) => {
if (err) { console.log(err) }
console.log(items)
})
}
},
mounted () {
this.getIllustrations() …Run Code Online (Sandbox Code Playgroud) 突然,在创建反应生产版本时,我收到此错误。
> safe-courier@0.1.0 build
> react-scripts build
Creating an optimized production build...
Failed to compile.
Module not found: Error: Can't resolve 'fs' in '/workspace/safe-courier/client/node_modules/dotenv/lib'
Run Code Online (Sandbox Code Playgroud)
我在网上搜索过,发现类似的案例,但框架不同,但对于这个问题都没有帮助。
我尝试卸载 dotenv 并再次重新安装,但出现相同的错误。我不确定 fs 模块是 Nodejs 的一部分并与其捆绑在一起可能会出现什么问题
我搜索过Nodejs Doc,但是找不到相关的API.
所以我编写以下代码来确定目录是否为空目录.
var fs = require('fs');
function isEmptyDir(dirnane){
try{
fs.rmdirSync(dirname)
}
catch(err){
return false;
}
fs.mkdirSync(dirname);
return true
}
Run Code Online (Sandbox Code Playgroud)
问题:看起来有点麻烦,有更好的方法用nodejs做吗?
我的功能有点问题.我想在许多目录中获取所有文件.目前,我可以检索传入参数的文件中的文件.我想检索作为参数传递的文件夹中每个文件夹的html文件.我将解释如果我输入参数"test"我检索"test"中的文件,但我想检索"test/1/*.html","test/2 / ./ .html":
var srcpath2 = path.join('.', 'diapo', result);
function getDirectories(srcpath2) {
return fs.readdirSync(srcpath2).filter(function (file) {
return fs.statSync(path.join(srcpath2, file)).isDirectory();
});
}
Run Code Online (Sandbox Code Playgroud)
结果:[1,2,3]
谢谢 !
错误代码如下所示:
{ Error: ENOENT: no such file or directory, open 'sad' errno: -2, code: 'ENOENT', syscall: 'open', path: 'sad' }
Run Code Online (Sandbox Code Playgroud)
其中“sad”是我想写入的文件名,它不存在。
代码如下所示:
fs.writeFile(filename, JSON_string, { flag: 'w' }, function(err){
if(err){
return console.error(err);
}
return JSON_string;
});
Run Code Online (Sandbox Code Playgroud)
还有其他类似的问题,但它们的路径都是错误的,以/开头或不以/开头,我只想在运行这个node.js应用程序的根目录上写一个文件(它也在这个目录中用npm初始化...)。
运行
sudo node server4.js
Run Code Online (Sandbox Code Playgroud)
也不行。将标志更改为 w+ 或 wx 或其他什么都无济于事。如果文件存在,代码有效。
节点 v9+。
我需要使用 writeFile() 函数。
我正在将一些文本写入我们 fs 模块的文件中。
fs.writeFile('result.txt', 'This is my text', function (err) {
if (err) throw err;
console.log('Results Received');
});
Run Code Online (Sandbox Code Playgroud)
现在这工作正常。我想将此文件写入项目中的 niktoResults 文件夹,但是当我这样做时
fs.writeFile('/niktoResults/result.txt', 'This is my text', function (err) {
if (err) throw err;
console.log('Results Received');
});
Run Code Online (Sandbox Code Playgroud)
它导致错误。我不知道如何定义可以帮助我克服这个问题的目录路径。
Error:
Error: ENOENT: no such file or directory, open '/niktoResults/[object Object].txt'
Run Code Online (Sandbox Code Playgroud) 使用node.js,我试图构建一个对象数组并将它们写入文件.为此,我使用内置的fs库.
在调用之后
var file = fs.createWriteStream('arrayOfObjects.json');,file.write('[')我运行了几个异步函数,最终附加了这样的对象:
file.write(JSON.stringify(objectToAppend) + ',\n')
我能确定当所有的物体已经停止追加,而这正是我跑file.write(']')和file.end().我的问题是将最后一个逗号添加到最后一个对象的末尾会导致JSON无效.
由于脚本的异步性质,很难确定最后一个对象的创建位置和时间,因此我想知道是否有一种方法可以从文件流中删除或删除字符.如果是这样,我可以在添加最后一个']'字符之前执行此操作.
我可以手动执行此操作,但我希望将此管道传输到另一个应用程序.我想过使用唯一的解决方案fs.truncate()功能然而,这似乎不为文件流工作,既不file.length或file.length()会给我的内容的长度,因为它不是一个字符串,因此很难确定如何或在哪里截断文件.
现在我刚刚添加'{}]'到数组的末尾以使其成为有效的JSON,但是这个空对象可能会在以后引起一些问题.
另请注意:我在此流中编写的对象数组非常大,所以我宁愿不结束流并重新打开文件.
Node.js fs模块是否隐式将Windows文件夹路径分隔符转换'\\'为'/'?
例如,如果我在Windows上使用此调用:
fs.readdirSync(dir).forEach(function(file) {
});
Run Code Online (Sandbox Code Playgroud)
file参数有'/'路径分隔符,不是'\\',为什么呢?
我有:
fs.readFile('../services/Prescipcion.xml', "utf8", function (err, data) {
console.log("err->", err);
console.log("data", data);
});
Run Code Online (Sandbox Code Playgroud)
并记录:
err-> {
[Error: ENOENT: no such file or directory, open '../services/Prescipcion.xml']
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '../services/Prescipcion.xml'
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样.
-期望的行为
-实际行为
-我尝试过的内容
-再现步骤
-研究
期望的行为
从多个api请求接收的多个可读流通过管道传输到单个可写流。
api响应来自ibm-watson的textToSpeech.synthesize()方法。
需要多个请求的原因是因为该服务5KB对文本输入有限制。
因此18KB,例如一个字符串,需要四个请求才能完成。
实际行为
可写流文件不完整且出现乱码。
该应用程序似乎“挂起”。
当我尝试.mp3在音频播放器中打开不完整的文件时,它说文件已损坏。
打开和关闭文件的过程似乎会增加文件的大小-就像打开文件一样,它会促使更多数据流入其中。
对于较大的输入(例如,四个4000字节或更少的字符串),不良行为更加明显。
我尝试过的
我尝试了几种方法,使用npm包Combined-stream,Combined-stream2,multistream和archiver 将可读流传递给单个可写流或多个可写流,它们都会导致文件不完整。我最后一次尝试不使用任何软件包,并在Steps To Reproduce下面的部分中显示。
因此,我在质疑应用程序逻辑的每个部分:
01. Watson文本对语音API请求的响应类型是什么?
Response type: NodeJS.ReadableStream|FileObject|Buffer
Run Code Online (Sandbox Code Playgroud)
我很困惑,响应类型是三种可能的事情之一。
在所有尝试中,我一直假设它是一个readable stream。
02. 我可以在一个地图函数中发出多个api请求吗?
03. 我可以在中包装每个请求
promise()并解决response吗?04.是否 可以将结果数组分配给
promises变量?05. 我可以声明
var audio_files = await Promise.all(promises)吗?06. 声明之后,所有答复都“完成”了吗?
07. 如何正确地将每个响应传递给可写流?
08. 如何检测所有管道何时完成,以便可以将文件发送回客户端? …