context.read<UserRepository>()

问题描述 投票:0回答:1
问题

每当我尝试访问

/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 存储库。
dart authentication http dependency-injection backend
1个回答
0
投票
我找到了解决方案!

repo

 无法访问依赖项,因为 
_middleware
 不是全局的。
这可以通过使 
_middleware
 全局化或像我一样向 
middleware
 添加另一个 
/auth
 来解决:

    运行此命令为
  1. /auth
     创建一个新的中间件。
dart_frog new middleware "/auth"

    在那里提供所需的依赖项。
© www.soinside.com 2019 - 2024. All rights reserved.