【发布时间】:2019-07-11 09:26:31
【问题描述】:
我在一个目录和子目录中有我想要与特定条件匹配的 json 文件,但是我不知道如何使用子目录。
我正在使用require-all 来查找 json 文件:
const reqAll = require('require-all')({
dirname: __dirname + '/resource',
filter: /(.+)\.json$/,
recursive: true
});
我的文件树是这样的:
MyDir
- file1.json
- SubDir
-- file2.json
打印reqAll会输出:
{
file1: {
path: /first,
body: ...some body
},
SubDir: {
file2: {
path: /second,
body: ...some body
}
}
}
我最初使用以下过滤器来清除我的数据,因为我最初不使用子目录,但现在它是有意义的。
let source = Object.values(reqAll).filter(r => {
return r.path === req.url;
}
req.url 是我发送的 http 请求的 url。即:localhost:8080/first,这样它将与我目录中的 file1 文件匹配。
问题是,当我提交 localhost:8080/second 时,我没有收到响应,因为我无法匹配到 file2,因为它位于子目录中。发送localhost:8080/SubDir/file2 也不起作用。
有什么方法可以让它工作吗?
【问题讨论】:
-
@T.J.Crowder - 当我说
Printing...时,我的意思是实际打印变量reqAll。如果对于过滤器,我将其简单地打印在那里,它只会输出文件名。 -
忽略我。我的子目录名为
x,我设法在输出中忽略了它。我得到和你一样的输出。 :-) -
我不太清楚你想用这些 JSON 文件做什么。
path属性是否应该是您为 HTTP 服务器定义的路径? (例如,使用 ExpressJS 或 Koa 或...)然后您在处理该请求时使用同一对象(其中包含path的对象)中的其他数据? -
@T.J.Crowder - 所以,我将在
localhost:8080/first上执行 HTTP GET,它应该返回file1对象的主体。这实际上适用于这个端点。但是,当我在localhost:8080/second上执行 HTTP GET 时,我无法取回正文。这是因为let source...部分。假设每个新对象都以文件名开头,并且正下方有path属性,而我们可以看到第二个对象以目录名开头,正下方只有文件名。path属性隐藏在对象的第二层中。
标签: javascript recursion path