簡體   English   中英

從 controller 中的方法響應,無需請求,來自 Express

[英]Respond from method in controller without req, res from Express

我有一種在 Mongo 中執行更新的方法,但我無權訪問“res”和“res”,因為它是一種我將在多個場合使用的方法。

我的問題是當我嘗試返回時響應更新但由於請求永遠不會完成它不起作用。 你知道我該怎么回答嗎?

此方法調用將被多次重用的方法:

let item = (req, res = response ) => {

        const { id } = req.params;
    
        const { status, user, ...data } = req.body; 
        data.user = req.uid; 
        data.expenditure = null;

        let item = {
                concept: data.concept,
                revenue: data.revenue,
            'createdBy': {
                    uid: req.uid,
                    username: req.user.username,
                },
                description: data.description
         }
            
        createNewItem( id, item );
}

這是多次重用沒有“req”或“res”的方法:

const createNewItem = async ( id, item ) => {

       try {

        let pettycash = await PettyCash.findByIdAndUpdate( id,
            {
                $push: { 
                    'items': {
                      $each: [item],
                    }
                }
            },{ new: true }

        );

    return { err: null, status: 200, pettycash };
        
             
    } catch (err) {
        return { err: err.toString(), status: 500, data: null };         
    } 
}

雖然過程是正確的return { err: null, status: 200, pettycash }; 沒有完成請求,所以 POSTMAN 永遠不會完成,你一直在等待一些響應。

謝謝。

好的,有兩個選擇。

一次通過將res作為您不想要的參數,這不是一個好主意,因為它違反了 function 的單一責任規則。

您添加await以便 controller 等待 function 執行完成。 為此,請使您的 controller async 這通常是一個好主意。 你讓 controller 做它的工作,而你的createNewItem只負責創建一個項目。

let item = async (req, res = response ) => {

    const { id } = req.params;

    const { status, user, ...data } = req.body; 
    data.user = req.uid; 
    data.expenditure = null;

    let item = {
            concept: data.concept,
            revenue: data.revenue,
        'createdBy': {
                uid: req.uid,
                username: req.user.username,
            },
            description: data.description
     }
        
    await createNewItem( id, item );

    // send response back
 }

暫無
暫無

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

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