从控制器中的方法响应,而不需要来自Express的req、res



我有一个在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作为您不想要的参数传递给函数,这不是一个好主意,因为它违反了函数的单一责任规则。

添加await,以便控制器等待函数执行完成。为此,请将控制器设为async。这通常是个好主意。您让控制器完成它的工作,而您的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
}

相关内容

  • 没有找到相关文章