swordjs / sword-framework

A small and flexible for serverless nodejs framework 💗
25 stars 3 forks source link

支持集成响应 #9

Closed seho-dev closed 2 years ago

seho-dev commented 2 years ago

在各个平台, 不管是server还是unicloud等其他环境, 有时我们需要返回指定状态码和返回头, 所以在最新的runtime中定义了一个新的方式, 可以非常简单的返回, 那就是集成响应, 在serverless平台我们同样需要这样的集成响应; 比如unicloud, 其中也有集成响应概念, 因为它不仅是要在app中内部调用, 也需要暴露给公网, 所以在公网(云函数url化)下, 它和server端的表现是一致的.

seho-dev commented 2 years ago

我们在runtime中规定了useApi新的使用姿势:

import { useApi } from '@swordjs/sword-framework';
import { ReqQuery, ReqParams, Res } from './proto';

export default useApi<{
  query: ReqQuery;
  params: ReqParams;
  res: Res;
}>({
  handler: async (ctx) => {
    return () => {
      return {
        statusCode: 200,
        statusMessage: 'success',
        headers: {},
        data: {
          message: 'Hello, World!'
        }
      };
    };
  }
});

runtime会检查你的返回值, 如果是函数, 你在ide中不仅会获得类型提示, 还会返回集成响应, 意味着你不需要任何学习成本, 只需要更改为函数返回值就可以了😄 !

值得注意的是, 在unicloud环境下你的statusMessage将不起作用, 因为unicloud的集成返回没有这个选项, 你可以将message放到data中, 由客户端去处理;