Read Request Parameters

Midway provides decorators for common parameter types.

Common decorators

DecoratorPurposeExample
@Query()Query string/user?name=tom
@Param()Route params/user/:id
@Body()Request bodyJSON payload
@Headers()Request headersAuthorization

Query params with @Query

import { Controller, Get, Query } from '@midwayjs/core';
@Controller('/')
export class HomeController {
@Get('/greet')
async greet(@Query('name') name: string) {
return `Hello, ${name || 'Guest'}!`;
}
}

Route params with @Param

@Get('/user/:id')
async getUserById(@Param('id') id: string) {
return {
userId: id,
name: `User ${id}`,
email: `user${id}@example.com`,
};
}

Combine multiple params

@Get('/search/:category')
async search(
@Param('category') category: string,
@Query('keyword') keyword: string,
@Query('page') page: string = '1'
) {
return {
category,
keyword,
page: parseInt(page),
results: [],
};
}

Practice: calculator API

@Get('/calc/:operation')
async calculate(
@Param('operation') operation: string,
@Query('a') a: string,
@Query('b') b: string
) {
const num1 = parseFloat(a);
const num2 = parseFloat(b);
let result: number;
switch (operation) {
case 'add':
result = num1 + num2;
break;
case 'subtract':
result = num1 - num2;
break;
case 'multiply':
result = num1 * num2;
break;
case 'divide':
result = num1 / num2;
break;
default:
return { error: 'Unsupported operation' };
}
return { operation, a: num1, b: num2, result };
}

Type conversion reminder

URL params are strings. Convert as needed:

  • Number: parseInt() / parseFloat()
  • Boolean: value === 'true'
  • Date: new Date(value)

Summary

  • Use @Query() for query strings
  • Use @Param() for route params
  • Combine decorators freely in one method
  • Always handle type conversion and validation
Powered by WebContainers
Files
Preparing Environment
  • npm install
  • npm run dev