[英]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.