Flutter服务器端轻量级解决方案插件server_nano_nano的使用
Flutter服务器端轻量级解决方案插件server_nano_nano的使用
server_nano_nano
一个用Dart编写的超轻量级HTTP服务器。 该项目是伟大的server_nano项目的克隆,但具有以下特点:
- 不支持WebSocket
- 没有性能模式
- 一些修复
🚀 快速开始
安装
要将server_nano_nano
集成到您的Dart项目中,请运行:
dart pub add server_nano_nano
基本使用
以下是一个基本示例以帮助您入门:
import 'package:server_nano_nano/server_nano_nano.dart';
void main() {
final server = Server();
// 同步请求
server.get('/', (req, res) {
res.send('Hello World!');
});
// 异步请求
server.get('/user/:id', (req, res) async {
// 模拟数据库查询延迟
await Future.delayed(Duration(seconds: 2));
res.send('Hello User ${req.params['id']}!');
});
server.listen(port: 3000);
}
为什么要使用server_nano_nano? 🤔
- 友好的API:
server_nano_nano
提供了直观易用的API。它类似于express.js,但在Dart中(且更快)。 - 中间件:
server_nano_nano
支持中间件,帮助您操作请求和响应对象。 - 静态文件:
server_nano_nano
支持开箱即用的静态文件服务。 - 安全性:
server_nano_nano
支持HTTPS,并有一个Helmet中间件来缓解常见的Web漏洞。 - 跨平台:
server_nano_nano
是跨平台的,可以在任何东西上运行! - 开源:
server_nano_nano
是开源的,免费使用。 - 最小足迹:
server_nano_nano
具有最小的足迹,以实现最佳效率。您可以几分钟内读完整个源代码。
📘 API参考
Server:
HTTP:
server_nano_nano
支持多种HTTP方法,如GET、POST、PUT、DELETE、PATCH、OPTIONS、HEAD、CONNECT和TRACE。每种方法的语法都很简单:
server.get('/path', handler);
server.post('/path', handler);
server.put('/path', handler);
server.delete('/path', handler);
// ... 和其他方法相同
其中handler
是一个接受Request
和Response
对象的函数。
例如:
server.get('/user/:id', (req, res) {
final id = req.params['id'];
res.send('Hello User $id!');
});
Request:
ContextRequest
类表示HTTP请求。它提供了几种方法和属性来帮助提取请求信息:
header(name)
:获取给定名称的所有头。accepts(type)
:检查请求是否接受特定的MIME类型。isMultipart
:检查请求的内容类型是否为’multipart/form-data’。isJson
:检查请求的内容类型是否为’application/json’。isForm
:检查请求的内容类型是否为’application/x-www-form-urlencoded’。isFormData
:检查请求的内容类型是否为’multipart/form-data’。isFile
:检查请求的内容类型是否为’application/octet-stream’。isForwarded
:检查请求是否由代理或负载均衡器转发。isMime(type, {bool loose = true})
:检查请求的内容类型是否匹配特定的MIME类型。loose
参数允许部分匹配MIME类型。contentType
:获取请求的内容类型。hasContentType
:检查请求是否有内容类型头。input
:获取原始的HttpRequest
对象。query
:获取请求的查询参数作为映射。params
:获取请求的路由参数作为映射。cookies
:获取与请求一起发送的cookie列表。path
:获取请求的路径。uri
:获取请求的完整URI。session
:获取与请求关联的会话。method
:获取请求的HTTP方法。certificate
:获取请求中使用的SSL证书(如果适用)。param(name)
:通过名称检索特定参数。首先检查路由参数,然后检查查询参数。payload({Encoding encoder = utf8})
:异步获取请求的有效负载。
MultipartUpload
类表示来自’multipart/form-data’请求的文件或数据段。它提供了将上传转换为文件或JSON表示的方法。
name
:上传的名称。filename
:上传的文件名。contentType
:上传的内容类型。data
:上传的数据。toFile({String path})
:将上传转换为文件。如果指定了path
,文件将写入该路径。否则,将创建一个临时文件。toJson()
:将上传转换为JSON表示。
Response:
ContextResponse
类提供了多种方法帮助您构造响应。以下是所有可用的方法:
getHeader(String name)
:按名称检索头。setHeader(String name, Object value)
:设置具有特定值的头。addDisposeCallback(DisposeCallback disposer)
:添加将在响应被处置时调用的回调。setContentType(String contentType)
:设置Content-Type头。cache(String cacheType, [Map<String, String> options = const {}])
:设置Cache-Control头。status(int code)
:设置响应的HTTP状态码。setCookie(String name, String val, [Map<String, dynamic> options = const {}])
:设置带有可选参数的cookie。deleteCookie(String name, [String path = '/'])
:通过名称删除cookie及其可选路径。getCookie(String name)
:通过名称检索cookie。attachment(String filename)
:将Content-Disposition头设置为"attachment"并指定文件名。mime(String path)
:根据文件扩展名设置Content-Type。send(Object string)
:发送纯文本响应。sendJson(Object data)
:发送JSON响应。sendHtmlText(Object data)
:发送HTML文本响应。sendFile(String path)
:发送文件作为响应。close()
:关闭响应并调用任何处置回调。redirect(String url, [int code = 302])
:将响应重定向到特定URL并带可选的状态码。
每个方法都是链式的,允许在构建响应时使用流畅接口。例如:
res.status(200).setContentType('text/plain').send('Hello, World!');
中间件:
中间件允许您在请求到达路由处理器之前操作请求和响应对象。它们按添加顺序执行。
Helmet:
Helmet
是一个中间件,设置HTTP头以防止一些常见的Web漏洞。使用Helmet中间件的示例如下:
server.use(Helmet());
Helmet设置的头:
X-XSS-Protection
:有助于防止跨站脚本攻击。X-Content-Type-Options
:有助于防止MIME混淆攻击。X-Frame-Options
:有助于防止点击劫持攻击。Referrer-Policy
:控制应用程序的referrer策略。Content-Security-Policy
:有助于防止内容注入攻击。
Cors:
Cors
是一个中间件,允许跨域资源共享。使用Cors中间件的示例如下:
server.use(Cors());
创建自定义中间件:
创建自定义中间件很简单。只需扩展Middleware
类并覆盖handler
方法。
class CustomMiddleware extends Middleware {
@override
Future<bool> handler(ContextRequest req, ContextResponse res) async {
// 您的自定义逻辑在这里。
// 返回true以继续到下一个中间件。
// 返回false以停止中间件链。
return true;
}
}
Listen:
要启动您的服务器,请调用服务器实例上的listen
方法:
server.listen(port: 3000);
SSL/TLS:
您可以通过提供SSL/TLS证书详细信息使您的服务器支持HTTPS:
server.listen(
host: '0.0.0.0',
port: 8080,
certificateChain: 'path_to_certificate_chain.pem',
privateKey: 'path_to_private_key.pem',
password: 'optional_password_for_key',
);
服务静态文件:
server_nano_nano
支持开箱即用的静态文件服务。只需在服务器实例上调用static
方法:
server.static('/path/to/static/files');
更多关于Flutter服务器端轻量级解决方案插件server_nano_nano的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter服务器端轻量级解决方案插件server_nano_nano的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
server_nano
是一个用于 Flutter 的轻量级服务器端解决方案插件,它允许你在 Flutter 应用中快速搭建一个简单的 HTTP 服务器。这个插件非常适合用于开发小型应用、原型设计或需要快速搭建服务器端的场景。
安装 server_nano
首先,你需要在 pubspec.yaml
文件中添加 server_nano
依赖:
dependencies:
server_nano: ^1.0.0
然后运行 flutter pub get
来安装依赖。
基本用法
以下是一个简单的示例,展示如何使用 server_nano
在 Flutter 应用中创建一个 HTTP 服务器。
import 'package:server_nano/server_nano.dart';
void main() async {
// 创建一个 Server 实例
final server = Server();
// 定义一个 GET 请求处理程序
server.get('/', (Request request) {
return Response.ok('Hello, World!');
});
// 启动服务器并监听端口
await server.listen(port: 8080);
print('Server is running on http://localhost:8080');
}
处理不同的 HTTP 方法
server_nano
支持处理不同的 HTTP 方法,如 GET
、POST
、PUT
、DELETE
等。
// 处理 POST 请求
server.post('/submit', (Request request) {
// 获取请求体中的数据
final data = request.body;
return Response.ok('Received: $data');
});
// 处理 PUT 请求
server.put('/update', (Request request) {
final data = request.body;
return Response.ok('Updated: $data');
});
// 处理 DELETE 请求
server.delete('/delete', (Request request) {
return Response.ok('Resource deleted');
});
处理路径参数
你可以通过 :param
语法来定义路径参数,并在处理程序中访问它们。
server.get('/user/:id', (Request request) {
final userId = request.params['id'];
return Response.ok('User ID: $userId');
});
处理查询参数
你可以通过 request.queryParams
来访问查询参数。
server.get('/search', (Request request) {
final query = request.queryParams['q'];
return Response.ok('Search query: $query');
});
处理静态文件
server_nano
还支持处理静态文件,你可以使用 serveStatic
方法来指定静态文件的目录。
server.serveStatic('/assets', './public');
错误处理
你可以通过 server.errorHandler
来处理未捕获的异常和错误。
server.errorHandler((error) {
return Response.internalServerError('Something went wrong: $error');
});
停止服务器
你可以通过调用 server.close()
方法来停止服务器。
await server.close();
完整示例
以下是一个完整的示例,展示了如何创建一个简单的 HTTP 服务器,并处理不同的请求类型和参数。
import 'package:server_nano/server_nano.dart';
void main() async {
final server = Server();
server.get('/', (Request request) {
return Response.ok('Hello, World!');
});
server.get('/user/:id', (Request request) {
final userId = request.params['id'];
return Response.ok('User ID: $userId');
});
server.post('/submit', (Request request) {
final data = request.body;
return Response.ok('Received: $data');
});
server.serveStatic('/assets', './public');
server.errorHandler((error) {
return Response.internalServerError('Something went wrong: $error');
});
await server.listen(port: 8080);
print('Server is running on http://localhost:8080');
}