带参数的POST请求不适用于koa-router

时间:2017-10-14 18:20:41

标签: http-post url-parameters koa koa-router

我正在尝试使用Koa构建一个简单的REST API。为此,我使用的是koa-router。我有两个问题:

  1. 每当我尝试在mainRouter.ts中的POST-Method中添加参数时,如":id",邮递员会显示"未找到"。我的要求:http://localhost:3000/posttest?id=200

  2. 我无法使用" ctx.params"获取参数。我也无法在koajs页面上找到任何关于它的信息,但我确实看到这样的例子到处都有?!

  3. 这是我的应用:

    app.ts

    import * as Koa from 'koa';
    import * as mainRouter from './routing/mainRouter';
    const app: Koa = new Koa();
    app
        .use(mainRouter.routes())
        .use(mainRouter.allowedMethods());
    app.listen(3000);
    

    mainRouter.ts

    import * as Router from 'koa-router';
    
    const router: Router = new Router();
    router
        .get('/', async (ctx, next) => {
            ctx.body = 'hello world';
        });
    router
        .post('/posttest/:id', async (ctx, next) => {
            ctx.body = ctx.params.id;
        });
    export = router;
    

    如果我将POST方法更改为此方法,那么我会得到" 200":

    router
        .post('/posttest', async (ctx, next) => {
            ctx.body = ctx.query.id;
        });
    

1 个答案:

答案 0 :(得分:0)

如果您在请求中使用查询字符串,请执行以下操作:

x=0
while x<6:
    print '\ '*(2*x)+'! '*(22-(4*x))+'/ '*(2*x)
    x+=1

然后您的路由处理程序应该使用http://localhost:3000/posttest?id=200 ,而不是ctx.query

ctx.params

如果您要发送此类请求,则只能使用router.post('/posttest', async (ctx, next) => { console.log(ctx.query.id); // 200 });

ctx.params

在这种情况下,你会像这样编写路由处理程序:

http://localhost:3000/posttest/200