NodeJS Flutter _客户端套接字异常(连接超时)

93ze6v8z  于 2023-01-20  发布在  Node.js
关注(0)|答案(1)|浏览(147)
    • 配置省道**
class Config {
  static const String appName = 'Shopping app';
  static const String apiURL = '192.168.8.101:4000';
  static const String loginAPI = '/users/login';
  static const String registerAPI = '/users/register';
  static const String userProfileAPI = '/users/user-Profile';
}
    • 应用程序接口服务. dart**
class APIService {
  static var client = http.Client();

  static Future<bool> login(LoginRequestModel model) async {
    Map<String, String> requestHeaders = {
      'Content-Type': 'application/json',
    };

    var url = Uri.http(Config.apiURL, Config.loginAPI);

    var response = await client.post(
      url,
      headers: requestHeaders,
      body: jsonEncode(model.toJson()),
    );

    if (response.statusCode == 200) {
      await SharedService.setLoginDetails(loginResponseJson(response.body));
      return true;
    } else {
      return false;
    }
  }

  static Future<RegisterResponseModel> register(
      RegisterRequestModel model) async {
    Map<String, String> requestHeaders = {
      'Content-Type': 'application/json',
    };

    var url = Uri.http(Config.apiURL, Config.registerAPI);

    var response = await client.post(
      url,
      headers: requestHeaders,
      body: jsonEncode(model.toJson()),
    );

    return registerResponseJson(response.body);
  }
}
    • 登录. dart**
FormHelper.submitButton(
  'Login',
  btnColor: const Color.fromARGB(255, 25, 19, 83),
  borderColor: Colors.white,
  borderRadius: 10,
  () {
    print('Login');
  
    if (validateAndSave()) {
      setState(() {
        isApiCallProcess = true;
      });
    
      LoginRequestModel model = LoginRequestModel(
        username: username!,
        password: password!,
      );

      APIService.login(model).then(
        (response) {
          setState(() {
            isApiCallProcess = false;
          });

        if (response) {
          Navigator.of(context).pushNamedAndRemoveUntil(
              homeRoute, (route) => false);
        } else {
          FormHelper.showSimpleAlertDialog(
            context,
            Config.appName,
            'Invalid credentials',
            'OK',
            () {
              Navigator.of(context).pop();
              },
            );
          }
        },
      );
    }
  },
),

我正在尝试使用NodeJS登录。
但是当我点击登录按钮时,它抛出一个异常,说

    • 一月一日**

我的PC IP地址显示为192.168.8.100,当我在cmd中执行netstat -a时,它显示正在侦听192.168.8.100:139
我用我的手机作为调试模拟器。
手机IP地址为192.168.8.101
我的代码有什么问题???

tkclm6bt

tkclm6bt1#

很简单,希望你明白。
只需更改static const String apiURL = '192.168.8.100:4000';以反映服务于API的PC的IP(可能是端口4000,不应是139,因为端口〈1024是保留的"众所周知的端口")
还有一点:你应该总是处理异常,这样你的应用程序就不会崩溃,在这种情况下,如果你的api变得不可访问。

try {
 var response = await client.post(
   url,
   headers: requestHeaders,
   body: jsonEncode(model.toJson()),
 );

 if (response.statusCode == 200) {
   await SharedService.setLoginDetails(loginResponseJson(response.body));
   return true;
 } else {
   return false;
 } 
} on SocketException { 
// TODO: handle connection problem
} catch (e) {
// TODO: handle all other exceptions just in case
}

相关问题