簡體   English   中英

快速路線中的自定義事件偵聽器

[英]Custom event listeners in an express route

在快速路由中處理自定義事件偵聽器的最佳方法是什么?

我可能做錯了所有,但現在是這樣:

module.exports = {
    get: function(req, res, next) { 

        MyModel.on('error', function(err) {
          res.send(501)
        })

        MyModel.on('found', function() {
          res.send(200)
        })

        MyModel.on('notFound', function() {
          res.send(404)
        })

        MyModel.findByName(req.params.name);
      }
}

我可以看到這是完全錯誤的,因為每個事件偵聽器都將添加到每個請求中。

開始傳遞響應對象以促進事件觸發時的響應也感覺不對。

我可以在findByName方法上使用回調,但是我真的很喜歡綁定事件系統,但是我只是想知道如何更好地處理這種情況。

不要為此使用事件綁定,請使用回調函數:

module.exports = {
    get: function(req, res, next) {
        MyModel.findByName(req.params.name, function (error, model) {
            if (error) {
                return res.status(501).send(error);
            }
            if (!model) {
                return res.status(404).send('Not found');
            }
            res.send(model.toJSON());
        });
      }
}

為了基於注釋添加一些說明,您的示例使用的是express和mongoose,它們都是由同一原始作者編寫的,並且都主要面向函數樣式編程和回調。 盡管可以將框架設計為使用事件,回調或同時使用兩者和/或兩者(可選),但在這兩種特定情況下,庫會強制您使用回調,因為它不為這些特定操作提供事件。 這就是為什么對於這些​​特定的調用來說,表達和貓鼬來說,回調是慣用語。

現在來看您的示例,貓鼬確實在Model類級別發出了一些事件,但是這些事件與明確的請求/響應無關,因此更適合於錯誤記錄和異常處理以及基本Web應用程序之外的其他一些特殊用例響應渲染。

因此,當我說“不要為此使用用戶事件綁定”時,我並不是說事件綁定永遠都不合適,只是給定您的特定代碼段,此示例中所使用的庫都不支持它們,也不是慣用的基本的使數據庫查詢並發送回網頁的方案。

暫無
暫無

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

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