# 如何使用控制器
控制器,负责处理路由转发过来的请求,并且返回处理的结果。
默认情况下,当你使用命令行工具,成功创建一个项目后,在项目的 lib/app/controller
文件夹,会自动创建一个名字为 HomeController
,这是一个示例控制器,它的基本代码如下
import 'package:project_name/bootstrap/Context.dart';
import 'package:project_name/bootstrap/meta/RouteMeta.dart';
class HomeController {
('/', 'GET')
static void index(Context ctx) async {
ctx.html("hello world");
}
('/other', 'GET')
static void other(Context ctx) async {
String text = ctx.getString('text');
// some other code
ctx.html("get som text from web : " + text);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
非常简单的一个示例。我们来认识一下它们。
# 如何导入依赖
import 'package:project_name/bootstrap/Context.dart';
import 'package:project_name/bootstrap/meta/RouteMeta.dart';
2
依赖是指当前文件所需要的外部功能文件。上面的代码,导入了两个依赖,假设你的项目名为 project_name
。
Context.dart
文件里,定义的有 Context
类,它提供了一些接收信息的方法,以及输出信息的方法。
RouteMeta.dart
文件里,定义的有 RouteMeta
类,它是一种修饰,来提醒开发者或者程序,因该以什么请求方式,什么请求路径,才能访问它所修饰的代码快。
# 什么是控制器类和方法
class HomeController {
这一行告诉我们,这个文件定义了一个控制器类,名字为 HomeController
。 这个名字以 Controller
为结尾,是一种约定俗成的写法。
static void index(Context ctx) async {
// ...
static void other(Context ctx) async {
2
3
这两行,即是定义了两个方法,名字分别是 index
和 other
。 其中有一些关键字,需要说明:
关键字 static
告诉我们,他们是静态方法。
也就是说,我们可以使用 HomeController.index
和 HomeController.other
直接使用他们。
关键字 void
告诉我们,这两个方法只是处理代码流程,并不返回信息。
关键字 async
告诉我们,这两个方法支持异步处理。
提示
staic
, void
, async
这三各关键字对于一个控制器的方法非常重要,千万不要忘记他们。
# 简单的请求和响应
上面的 index
方法,里面只有一行代码
ctx.html("hello world");
它的意思是,输出一句话 hello world
给浏览器请求。输出的内容类型是 hmtl
类型。
上面的 other
,里面有三行代码
String text = ctx.getString('text');
// some other code
ctx.html("get som text from web : " + text);
2
3
它的意思是,接收请求参数 text
, 并且再输出一句话给浏览器。
其中 ctx.getString('text')
即是接收请求参数的,
它表明接收的参数名字是 text
,接收的参数类型是 String
, 也就是字符串
接收请求信息,返回响应信息,相关的内容还有很多,在接下来的两节里,我们将深入认识他们。