簡體   English   中英

Node.js:創建具有動作分離的模塊

[英]Node.js: create module with separation of actions

我有一個節點應用程序,我采用了以下功能,並將其放在新文件夾中的單獨文件中作為新模塊。 在此文件中,我需要處理一些操作,例如保存,刪除,編輯等。我有兩個問題:

  1. 我是否應該將此文件中的功能與操作分開並以不同的方式公開?

  2. 無論如何,我應該如何使用所有操作(例如reqrespath )所需的參數調用此功能?

我正在尋找具體的例子。

這是我使用的代碼:

module.exports = function () {
  const fs = require('fs')

  function fileAction (req, res, urlAction) {
    switch (urlAction) {

      case 'save':                  
        const writeStream = fs.createWriteStream('c://myfile.txt', { flags: 'w' })
        req.pipe(writeStream)
        req.on('end', function () {
          console.log('Finish to update data file')
        })
        res.end()
        break

      case 'delete':
      case 'update':
      default:
    }
}

我更喜歡這種方法,而不是在內部實現功能並導出詞法范圍。

簡單地說,我覺得“導出”的關注與功能的實現是分開的。 除此之外,您還可以重命名要導出的功能。 最重要的是,您可以更好地控制所需的內容和不希望導出的內容。

var delete= function(){

};

var update = function(){

};

var save = function(){

};

module.exports.update = update;
module.exports.delete = delete;
module.exports.save = save;

然后,您將能夠從主文件中調用方法:

var file = require('./file.js');
file.save();
file.delete();
file.update();

您應該做一些更面向對象的事情:

module.exports = {

    save: function () {

    },

    delete: function () {

    },

    update: function () {

    }
}

然后,您將能夠從主文件中調用方法:

const FileLib = require('./fileLib.js')

FileLib.save()

如果您打算在Express應用程序中將其用作邏輯,則實際上不需要直接在模塊內部使用reqres ,除非您正在編寫Express中間件或路由器。

但是我建議您使用路由器中的庫:

const FileLib = require('./fileLib.js')

router.put('/file/:id', function (req, res) {

    // Do your stuff with your library
    FileLib.save(req.param('fileToSave'))

    res.send()
})

除非它是中間件,否則您的庫不應過多地與快速架構耦合

編寫RESTful Express路由也可能是一個好主意。 使用HTTP動詞來指定對API的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM