[英]Typescript node express router and second argument. Typescript-eslint/no-misused-promises
我应该如何处理 function 注册来修复@typescript-eslint/no-misused-promises 。 我发现如何解决这个问题的一种方法是由 eslint 编写的。
"@typescript-eslint/no-misused-promises": [
"error",
{
"checksVoidReturn": false
}
]
但我想按照 eslint 的要求解决这个问题。 有任何想法吗?
import PromiseRouter from "express-promise-router";
import { login, registration } from './authController';
const router = PromiseRouter();
> ESLint: Promise returned in function argument where a void return was
> expected.(@typescript-eslint/no-misused-promises)
router.post('/registration', registration);
这里是完整的注册function
export async function registration(req: TreqBodyReg, res: Response): Promise<void> {
try {
const { email, password } = req.body;
const candidate = await ModelUser.findOne({ email }) as TuserFromDB;
if (candidate) {
res.status(400).json({ message: `There is user with email ${email}` });
return;
}
const hashPassword = bcrypt.hashSync(password, 7);
const user = new ModelUser({ email, password: hashPassword });
await user.save();
res.status(200).json({ message: `The user by email ${email} was successfully registered` });
} catch (err: unknown) {
res.status(400).json({ message: err });
}
};
这是回旋处,但我以这种方式解决了问题。
async function registerUser(req: TreqBodyReg, res: Response): Promise<void> {
const { email, password } = req.body;
const candidate = await ModelUser.findOne({ email }) as TuserFromDB;
if (candidate) {
res.status(400).json({ message: `There is user with email ${email}` });
return;
}
const hashPassword = bcrypt.hashSync(password, 7);
const user = new ModelUser({ email, password: hashPassword });
await user.save();
res.status(200).json({ message: `The user by email ${email} was successfully registered` });
}
export function registration(req: TreqBodyReg, res: Response): void {
registerUser(req, res).catch((err: unknown) => {
res.status(400).json({ message: err });
});
}
我在使用默认Router
时遇到了同样的问题,并通过这样做解决了它:
router.get("/", function(request: Request, response: Response): void {
void (async function(): Promise<void> {
// do your asychronous work here
response.json(/* put your payload here */);
})();
});
我承认我不喜欢额外的样板,但这是迄今为止我找到的最佳答案。
(async function(): Promise<void> {...})();
部分只是一个异步自调用 function(注意末尾的额外()
)。 它前面的void
去掉了返回类型,这样 ESLint 就知道你真的打算忽略返回的 promise。没有它,你会得到一个“no-floating-promises”错误。 当然,这意味着您有责任在内部使用try-catch
来处理错误......
因此,这种方法的最终结果是额外的样板允许您在默认的 Express Router 中使用 async/await。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.