【问题标题】:axios get an error when trying to get the listaxios 在尝试获取列表时出错
【发布时间】:2022-01-05 13:30:24
【问题描述】:

我需要从这个资源http://jsonplaceholder.typicode.com/photos获取列表

控制器

    @JsonController('/photo')
    @Service()
    export class PhotoController {
    constructor(private photoService: PhotoService) {}

    @Get('/load-photos')
    loadPhoto() {
        return axios
            .get('http://jsonplaceholder.typicode.com/photos')
            .then(async (response) => console.log(response.data.slice(0, 8)))
            .catch((e) => console.log(e));
    }
}

邮递员溃败:http://localhost:5000/photo/load-photos

只要我尝试通过 axios 尝试通过邮递员请求资源,我就会调用控制器并收到下面给出的错误。例如,如果我在应用程序之外执行操作,则可以通过 axios 轻松将数据输入控制台。

错误

Error:
    at new HttpError (C:\pet-project\express\node_modules\src\http-error\HttpError.ts:16:18)
    at new NotFoundError (C:\pet-project\express\node_modules\src\http-error\NotFoundError.ts:10:5)
    at ExpressDriver.handleSuccess (C:\pet-project\express\node_modules\src\driver\express\ExpressDriver.ts:324:15)
    at C:\pet-project\express\node_modules\src\RoutingControllers.ts:164:35
    at processTicksAndRejections (internal/process/task_queues.js:95:5)

应用类:

export class App {
    public app: express.Application;

    constructor() {
        this.app = express();
    }

    public async createExpressServer(port: number) {
        useContainer(Container);
        useExpressServer(this.app, {
            controllers: [AuthController, PhotoController],
            middlewares: [],
            authorizationChecker: async (action: Action, roles?: string[]): Promise<boolean> => {
                return false;
            }
        });
        this.app.listen(port, () => console.log(`Running on port ${port}`));
    }
}

调用应用程序:

const app = new App();
const port: any = process.env.APP_PORT;
app.createExpressServer(5000);

我在应用程序中使用什么:Express 和路由控制器库

问题:为什么我在尝试从控制器的资源中获取数据时收到此错误? 提前感谢您的回复!

【问题讨论】:

  • 您是否发送回复以回复您在邮递员中提出的请求?从您提供的代码来看,它看起来不像。 http客户端在发出请求后需要响应,否则请求最终会从客户端超时...
  • 我不明白你为什么同时使用awaitthen/catch。使用一个或另一个。而且您不会从控制器返回结果。
  • @Anatoly,即使我添加 return axios get (...) 并删除 await,错误仍然存​​在
  • @ash.io,我请求将数据输出到控制台,不用了,我不需要向客户端返回数据,只是为服务器获取它
  • 您确定您的请求正确吗?我在堆栈跟踪中没有看到 axios 错误。显示你如何称呼你的路线

标签: node.js typescript express axios


【解决方案1】:

您没有返回正确的非空结果或具有此类结果的 Promise,这就是 official documentation 所说的 404 错误的原因。 尝试使用await 获取结果并显式返回:

    @JsonController('/photo')
    @Service()
    export class PhotoController {
    constructor(private photoService: PhotoService) {}

    @Get('/load-photos')
    async loadPhoto() {
       try {
         const { data } = await axios
            .get('http://jsonplaceholder.typicode.com/photos');
         return data.slice(0, 8)
       } catch (e: Error) {
          console.log(e)
          // returns 404 for instance, it's up to you, 
          // see https://github.com/typestack/routing-controllers#throw-http-errors
          throw new NotFoundError(`Photos were not found.`); 
       }
    }
}

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2019-08-04
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2020-09-11
    • 2018-10-13
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多