繁体   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