Невозможно выполнить публикацию - PullRequest
0 голосов
/ 03 августа 2020

Я хочу отправлять сообщения от клиента к серверу. На стороне клиента я использую flutter, а на стороне сервера - nodejs. Проблема в том, что я не могу выполнить действие публикации. Но если жестко закодировать маршрут со значением параметра, я могу отправить данные на сервер.

stati c String urlLogin = API.url + '/ authentication / api / login / ADMIN / 12345 ';

, но когда я использую приведенный ниже код и свойства тела, не могу отправлять данные на сервер.

stati c String urlLogin = API .url + '/ authentication / api / login /';

у моего гостя проблема с параметром ... может быть ... Я не знаю, какую ошибку я совершил. Надеюсь может помочь мне решить эту проблему.Спасибо заранее.

ОШИБКА

<code> <pre>Cannot POST /authentication/api/login
FormatException: неожиданный символ (в символе 1)

(САЙТ КЛИЕНТА)

LoginPageForm.dart

class LoginPageForm extends StatefulWidget {
  LoginPageForm({Key key}) : super(key: key);

  @override
  _LoginPageFormState createState() => _LoginPageFormState();
}

class _LoginPageFormState extends State<LoginPageForm> {
  TextEditingController _idController = TextEditingController();
  TextEditingController _passwordController = TextEditingController();

  final _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Column(
        children: <Widget>[
          Container(
            width: MediaQuery.of(context).size.width,
            child: TextFormField(
              cursorColor: Colors.white,
              style: TextStyle(color: Colors.white),
              controller: _idController,
              decoration: InputDecoration(
                  labelText: "No ID",
                  labelStyle: TextStyle(color: Colors.white),
                  enabledBorder: UnderlineInputBorder(
                      borderSide: BorderSide(color: Colors.white))),
              validator: (value) {
                if (value.isEmpty) {
                  return "Sila masukkan no id pengguna";
                }
                return null;
              },
            ),
          ),
          Container(
            width: MediaQuery.of(context).size.width,
            child: TextFormField(
              cursorColor: Colors.white,
              style: TextStyle(color: Colors.white),
              controller: _passwordController,
              decoration: InputDecoration(
                  labelText: "Kata Laluan",
                  labelStyle: TextStyle(color: Colors.white),
                  enabledBorder: UnderlineInputBorder(
                      borderSide: BorderSide(color: Colors.white))),
              validator: (value) {
                if (value.isEmpty) {
                  return "Sila masukkan kata laluan..";
                }
                return null;
              },
            ),
          ),
          RaisedButton.icon(
              onPressed: () {
                var login = new LoginPost(
                    userNo: _idController.text,
                    password: _passwordController.text);
                

               //perform post
                LoginRepository.login(login.toMap()).then((response) {
                  print(response);
                });
              },
              icon: Icon(Icons.keyboard_arrow_right),
              label: Text("Daftar Masuk")),
        ],
      ),
    );
  }
}

loginRepository.dart

class LoginRepository {
  static String urlLogin = API.url + '/authentication/api/login/';
  //static String urlLogin = API.url + '/authentication/api/login/ADMIN/12345';

  static Future<LoginResponse> login(Map<String, dynamic> loginPost) async {
    try {
      final response =
          await http.post(Uri.encodeFull(urlLogin), body: loginPost);
      print(response.statusCode);
      // if (response.statusCode == 200) {
      print(response.body.toString());
      return LoginResponse.fromMap(json.decode(response.body));
      // } else {
      //   return null;
      // }
    } catch (e) {
      print(e);
      return null;
    }
  }
}

(СЕРВЕР САЙТ)

router.post('/api/login/:userNo/:password',(req,res)=>{
    var userNo = req.params.userNo;
    var password = req.params.password;

    let Status;
    
    const formData = {
        userNo: userNo,
        password : password
    }
});

1 Ответ

1 голос
/ 03 августа 2020

Публикация с body не дает вам пути URL, например, где id = 1 :

  1. Сообщение с URL: await http.post('user/' + id);

https://user/1

Сообщение с телом: await http.post('user/', body:{'id': id});

https://user?id=1

Поэтому вы должны указать, какой из них вы используете на стороне сервера, прежде чем делать запрос с флаттером. ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...