[英]Node.js: create module with separation of actions
我有一個節點應用程序,我采用了以下功能,並將其放在新文件夾中的單獨文件中作為新模塊。 在此文件中,我需要處理一些操作,例如保存,刪除,編輯等。我有兩個問題:
我是否應該將此文件中的功能與操作分開並以不同的方式公開?
無論如何,我應該如何使用所有操作(例如req
, res
, path
)所需的參數調用此功能?
我正在尋找具體的例子。
這是我使用的代碼:
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應用程序中將其用作邏輯,則實際上不需要直接在模塊內部使用req
和res
,除非您正在編寫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.