2017-10-14 7 views
1

J'essaye de construire une API REST simple avec Koa. Pour cela, j'utilise koa-routeur. J'ai deux problèmes:La requête POST avec les paramètres ne fonctionne pas avec koa-router

  1. Chaque fois que je tente d'ajouter des paramètres à mon POST-Méthode mainRouter.ts comme:, Postman montre une "not found" "id". Ma demande: http://localhost:3000/posttest?id=200

  2. Je ne peux pas obtenir les paramètres avec "ctx.params". Je ne trouve rien non plus sur la page koajs, mais je vois des exemples comme ça partout!

Ceci est mon application:

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; 

Si je change la méthode POST à ​​cela, alors je reçois "200":

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

Répondre

0

Si vous utilisez une chaîne de requête dans votre demande comme ceci:

http://localhost:3000/posttest?id=200 

Ensuite, votre gestionnaire d'itinéraire devraient utiliser ctx.query, non ctx.params:

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

Vous ne devez utiliser ctx.params que lorsque vous souhaitez envoyer des demandes de ce type:

http://localhost:3000/posttest/200 

Dans ce cas, vous pouvez écrire le gestionnaire d'itinéraire comme ceci:

router.post('/posttest/:id', async (ctx, next) => { 
    console.log(ctx.params.id); // 200 
});