farrow-js / farrow

A Type-Friendly Web Framework for Node.js
https://www.farrowjs.com
MIT License
770 stars 37 forks source link

Question: 没有使用 schema 格式定义的 url 时解析不出 param 和 query,这是预期的行为吗? #173

Closed zation closed 2 years ago

zation commented 2 years ago

例如

import express from 'express';
import farrowExpress from 'farrow-express';
import farrowHttp from 'farrow-http';

const { Http, Response } = farrowHttp;
const { adapter } = farrowExpress;

http
  .get('/user/:id')
  .use((data) => {
    return Response.text(JSON.stringify(data));
  });
const app = express();
app.use('/', adapter(http));

请求 GET /user/1?name=a 时,输出的是

{ pathname: '/user/1', method: 'GET' }

版本如下: "express": "^4.18.1", "farrow-express": "^1.12.0", "farrow-http": "^1.12.0",

github-actions[bot] commented 2 years ago

Thank feedback. We will check it later:-)

Lucifier129 commented 2 years ago

对的,这是预期的行为,schema 是将 type 和 runtime value 联系起来的媒介。

farrow 支持通过 useRequest() Hooks 获取到宽泛类型的 request 对象,也支持通过 farrow-schemaurl-schema 获取更精确类型的 request 对象。

像下面这样就可以获取到 params.id 并且保证为 int 值(带小数的数字无法通过 schema check)

http
  .get('/user/<id:int>')
  .use((data) => {
    return Response.text(JSON.stringify(data));
  });
zation commented 2 years ago

要不要考虑在没有定义 schema 的情况下也能解析出来 string value,这样从 express 或者 koa 迁移的成本会小一点

Lucifier129 commented 2 years ago

可以通过 http.use(middleware)useRequest 获取到带 query, params 的请求对象。

express/koa 的 restapi 式接口,也可以不迁移,新的接口使用 farrow-api 来开发,可以实现端到端类型同步,见文档