我有一个在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
}