/auth
端点时,我都会收到
Internal Server Error
并收到此错误,即使其他端点按预期工作:
ERROR - 2023-12-24 00:21:23.309836
POST /auth
Error thrown by handler.
Bad state: context.read<UserRepository>() called with a request context that does not contain a UserRepository.
This can happen if UserRepository was not provided to the request context:
```dart
// _middleware.dart
Handler middleware(Handler handler) {
return handler.use(provider<T>((context) => UserRepository());
}
```
package:dart_frog/src/context.dart 29:7 RequestContext.read
routes\auth\index.dart 25:24 _authUser
从错误消息来看,问题似乎是repo
无法访问依赖项,我已经记录了其余的代码以尝试理解为什么会发生这种情况,但似乎唯一的问题来自该行代码,这里是“/auth”端点使用的所有引用代码,请不要关注 JSON 响应:路由/auth/index.dart
import 'dart:io';
import 'package:dart_frog/dart_frog.dart';
import 'package:test_dart_frog_server/user_repository.dart';
Future<Response> onRequest(RequestContext context) async {
return switch (context.request.method) {
HttpMethod.post => _authUser(context),
_ => Future.value(Response(body: 'This is default'))
};
}
Future<Response> _authUser(RequestContext context) async {
final json = (await context.request.json()) as Map<String, dynamic>;
final username = json['username'] as String?;
final password = json['password'] as String?;
if (username == null || password == null) {
return Response.json(
body: {'message': 'Username or password not the same!'},
statusCode: HttpStatus.badRequest,
);
}
final repo = context.read<UserRepository>();
final user = await repo.authUser(username: username, password: password);
return Response.json(
body: {'user': user},
);
}
lib/user_repository.dart //authUser()方法Future<User?> authUser(
{required String username, required String password}) async {
final user = await _db.user.findFirst(
where: UserWhereInput(
username: StringFilter(equals: username),
password: StringFilter(equals: _hashPassword(password)),
),
);
return user;
}
注意:我对 dart_frog 和后端总体来说是新手,如果需要,我也可以共享 Github 存储库。
repo
无法访问依赖项,因为
_middleware
不是全局的。 这可以通过使
_middleware
全局化或像我一样向
middleware
添加另一个
/auth
来解决:
/auth
创建一个新的中间件。
dart_frog new middleware "/auth"