国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

(6)自定義模塊

2018-02-24 16:05 更新

要求

這個(gè)問(wèn)題和前面一個(gè)一樣,但是這次需要使用模塊。將需要?jiǎng)?chuàng)建兩個(gè)文件來(lái)解決這個(gè)問(wèn)題。

編寫(xiě)一個(gè)程序來(lái)打印出所給文件目錄的所含文件的列表,并且以特定的文件名后綴來(lái)過(guò)濾這個(gè)列表。這次將會(huì)提供兩個(gè)參數(shù),第一個(gè)參數(shù)是要列舉的目錄,第二個(gè)參數(shù)是要過(guò)濾的文件擴(kuò)展名。在終端中打印出過(guò)濾出來(lái)的文件列表(一個(gè)文件一行)。此外,必須使用異步 I/O。

需要編寫(xiě)一個(gè)模塊文件去做大部分的事情。這個(gè)模塊必須導(dǎo)出(export)一個(gè)函數(shù),這個(gè)函數(shù)將接收三個(gè)參數(shù):目錄名、文件擴(kuò)展名、回調(diào)函數(shù),并按此順序傳遞。文件擴(kuò)展名必須和傳遞給程序的擴(kuò)展名字符串一模一樣。也就是說(shuō),請(qǐng)不要把它轉(zhuǎn)成正則表達(dá)式或者加上”.”前綴或者做其他的處理,而是直接傳到模塊中去,在模塊中,可以做一些處理來(lái)使過(guò)濾器能正常工作。

這個(gè)回調(diào)函數(shù)必須以 Node 編程中慣用的約定形式(err,data)去調(diào)用。這個(gè)約定指明了,除非發(fā)生了錯(cuò)誤,否則所傳進(jìn)去給回調(diào)函數(shù)的第一個(gè)參數(shù)將會(huì)是 null,第二個(gè)參數(shù)才會(huì)是數(shù)據(jù)。在本題中,這個(gè)數(shù)據(jù)將會(huì)是過(guò)濾出來(lái)的文件列表,并且是以數(shù)組的形式。如果接收到了一個(gè)錯(cuò)誤,如:來(lái)自fs.readdir()?的錯(cuò)誤,則必須將這個(gè)錯(cuò)誤作為第一個(gè),也是唯一的參數(shù)傳遞給回調(diào)函數(shù),并執(zhí)行回調(diào)函數(shù)。

絕對(duì)不能直接在模塊文件中把結(jié)果打印到終端中,只能在原始程序文件中編寫(xiě)打印結(jié)果的代碼。

當(dāng)程序接收到一些錯(cuò)誤的時(shí)候,請(qǐng)簡(jiǎn)單的捕獲它們,并且在終端中打印出相關(guān)的信息

這里有四則規(guī)定,模塊必須遵守:

  • 導(dǎo)出一個(gè)函數(shù),這個(gè)函數(shù)能準(zhǔn)確接收上述的參數(shù)。
  • 當(dāng)有錯(cuò)誤發(fā)生,或者有數(shù)據(jù)的時(shí)候,準(zhǔn)確調(diào)用回調(diào)函數(shù)。
  • 不要改變其他的任何東西,比如全局變量或者 stdout。
  • 處理所有可能發(fā)生的錯(cuò)誤,并把它們傳遞給回調(diào)函數(shù)。

遵循一些約定的好處是,模塊可以被任何其他也遵守這些約定的人所使用。

提示

通過(guò)創(chuàng)建一個(gè)僅包含目錄讀取和文件過(guò)濾相關(guān)的函數(shù)的文件來(lái)建立一個(gè)新的模塊。要使模塊導(dǎo)出(export)單一函數(shù)(single function),可以將函數(shù)賦值給module.exports對(duì)象:

module.exports = function (args) { /* ... */ }

或者也可以使用命名函數(shù),然后把函數(shù)名賦值給module.exports。

要在原來(lái)的程序中使用新的模塊,請(qǐng)用 require() 載入模塊,這和載入 fs 模塊時(shí)候用require('fs')一樣,唯一的區(qū)別在于本地模塊需要加上 ‘./‘ 這個(gè)相對(duì)路徑前綴。所以,如果模塊文件名字是 mymodule.js,那么需要像這樣寫(xiě):

var mymodule = require('./mymodule.js')

‘.js’ 這個(gè)文件擴(kuò)展名通常是可以省略的。

現(xiàn)在,mymodule 這個(gè)變量就指向了模塊中 module.exports了,因?yàn)閯倢?dǎo)出了一個(gè)單一的函數(shù),所以現(xiàn)在所聲明的變量 mymodule 就是那個(gè)模塊所導(dǎo)出的函數(shù)了,就可以直接調(diào)用它了!

同樣,請(qǐng)記住,盡早捕獲錯(cuò)誤,并且在回調(diào)中返回:

function bar (callback) {
  foo(function (err, data) {
    if (err)
      return callback(err) // 盡早返回錯(cuò)誤

    // ... 沒(méi)有錯(cuò)誤,處理 `data`

    // 一切順利,傳遞 null 作為 callback 的第一個(gè)參數(shù)

    callback(null, data)
  })
}

代碼

solution.js:

var filterFn = require('./solution_filter.js')
var dir = process.argv[2]
var filterStr = process.argv[3]

filterFn(dir, filterStr, function (err, list) {
  if (err)
    return console.error('There was an error:', err)

  list.forEach(function (file) {
    console.log(file)
  })
})

solution_filter.js:

var fs = require('fs')
var path = require('path')

module.exports = function (dir, filterStr, callback) {

  fs.readdir(dir, function (err, list) {
    if (err)
      return callback(err)

    list = list.filter(function (file) {
      return path.extname(file) === '.' + filterStr
    })

    callback(null, list)
  })
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)