node.js - TypeScript/Eslint 在 Express Router 异步路由上抛出 'Promise returned' 错误

标签 node.js typescript eslint typeorm express-router

我有以下端点设置来在测试运行后重置数据库:

import { getConnection } from 'typeorm';
import express from 'express';
const router = express.Router();

const resetDatabase = async (): Promise<void> => {
  const connection = getConnection();
  await connection.dropDatabase();
  await connection.synchronize();
};

// typescript-eslint throws an error in the following route:
router.post('/reset', async (_request, response) => {
  await resetTestDatabase();
  response.status(204).end();
});

export default router;
全程自async下划线带有 typescript-eslint 错误 Promise returned in function argument where a void return was expected.该应用程序运行良好,但我不确定我是否应该进行更安全的实现,或者只是忽略/禁用 Eslint。知道该代码有什么问题吗?

最佳答案

看来您正在使用 no-misused-promises规定您不能返回的规则 Promise<void>在一个地方void是期待。
这意味着您不能返回 Promise<void>来自您的 Express 处理程序,因为返回类型为 RequestHandler从库中指定返回类型应为 void .我建议您将其更改为返回 Promise<Response>通过添加一个简单的 return关键词:

import { getConnection } from 'typeorm';
import express from 'express';
const router = express.Router();

const resetDatabase = async (): Promise<void> => {
  const connection = getConnection();
  await connection.dropDatabase();
  await connection.synchronize();
};

// typescript-eslint throws an error in the following route:
router.post('/reset', async (_request, response) => {
  await resetTestDatabase();
  return response.status(204).send();  // <----- return added here
});

export default router;
另一种选择是避免使用 async/await :
router.post('/reset', (_request, response) => {
  resetDatabase().then(() => response.status(204).send());
});

关于node.js - TypeScript/Eslint 在 Express Router 异步路由上抛出 'Promise returned' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67114152/

相关文章:

javascript - 使用 jQuery ajax 方法的简单expressjs PUT 处理程序

node.js - 架构未配置为突变

angular - 在 Angular 4 中使用权限的最佳方式是什么?

angular - 如何在 Angular 中对行为主题进行单元测试

javascript - 获取从 Typescript 中的函数返回的数组

javascript - 在 React Native 中使用流为无状态功能组件定义 Prop 类型

typescript - ESLint 要求分号并同时将其删除

node.js - Sequelize 方法提供未定义

javascript - 用于垂直点对齐的样式化 ESlint

node.js - 在一个 node.js 实例中运行多个 socket.io-clients