【发布时间】:2015-02-17 10:45:38
【问题描述】:
上周四刚开始编码,请耐心等待:
本教程的这个问题的代码是返回目录中仅包含扩展名的列表,而不是具有所述扩展名的文件列表,例如如果我使用一个包含 3 个 .js 文件的目录并在命令行中使用 js 作为我的扩展参数,那么我会得到 1.js 2.js 3.js 作为输出,这是教程和我的代码中的问题。谢谢!
learnyounode 教程 6 中的问题:
-
向您学习 Node.JS 以获得巨大的胜利!
────────────────────────────────────
使其模块化
第 6 题,共 13 题
这个问题和上一个问题一样,但是引入了模块的概念。您将需要创建两个文件来解决此问题。
创建一个程序,打印给定目录中的文件列表,按文件扩展名过滤。第一个参数是目录名,第二个参数是扩展过滤器。公关 int 文件列表(每行一个文件)到控制台。您必须使用异步 I/O。
您必须编写一个模块文件来完成大部分工作。模块必须导出一个带有三个参数的函数:目录名、文件扩展名字符串和一个回调函数,在 那个命令。文件扩展名参数必须与传递给您的程序的参数相同。即不要将其变成正则表达式或带有“。”的前缀或做任何其他事情,但将其传递给您的模块 你可以做你需要做的让你的过滤器工作。
必须使用惯用的 node(err, data) 约定调用回调函数。该约定规定,除非出现错误,否则传递给回调的第一个参数将为 null, 第二个将是您的数据。在这种情况下,数据将是您过滤的文件列表,作为一个数组。如果您收到错误,例如从您对 fs.readdir() 的调用中,必须调用回调 th 错误,并且只有错误,作为第一个参数。
您不能从您的模块文件直接打印到控制台,只能从您的原始程序打印。
如果错误冒泡到您的原始程序文件,只需检查它并将信息性消息打印到控制台即可。
这四件事是你的模块必须遵守的契约。
- 导出一个函数,该函数完全采用所描述的参数。
- 按照描述的错误或某些数据只调用一次回调。
- 不要更改任何其他内容,例如全局变量或标准输出。
- 处理所有可能发生的错误并将它们传递给回调。
签订合同的好处是,任何希望签订合同的人都可以使用您的模块。所以你的模块可以被其他任何学习younode的人或验证者使用,并且可以正常工作。 *
我的代码是: 模块(p6m.js):
var fs=require('fs'), ph=require('path'), exports =module.exports={}
exports.f=function(path,ext,callbk){
fs.readdir(path,function(err,files){
if(err){
return callbk(err,null)
}
files=files.filter(
function(file){
return ph.extname(file)==="."+ext
}
)
return callbk(null,files)}
)}
和我的程序(p6.js):
var p6m=require('./p6m'), path=process.argv[2], ext=process.argv[3]
p6m.f(path, ext, function(err,files){
if(err){return console.log.error('Error occured:', err)};
files.forEach(function(file){
console.log(file)})})
【问题讨论】:
-
NVM,还是不行。
标签: javascript node.js