使用颤振客户端向 node.js express api 发出 post 请求

Posted

技术标签:

【中文标题】使用颤振客户端向 node.js express api 发出 post 请求【英文标题】:Making a post request to node.js express api with flutter client 【发布时间】:2021-09-17 10:23:36 【问题描述】:

这是我的第一个问题,因此对于此平台上的任何菜鸟错误,我深表歉意。

我正在使用 Express.js 创建一个带有 Firebase Cloud Functions 的 API。我正在尝试让 Flutter 与此 API 进行通信以注册用户。当我在 Postman 中测试我的 API 时,一切正常。我使用原始 JSON 数据发送请求,响应为我提供了一些我希望在客户端上显示的帐户信息的 JSON 对象。

我正在使用 VSCode 来完成所有这些工作,并使用 Web 调试器调试 Flutter 代码。

我在这里环顾四周并尝试了两种解决方案,它们都有自己的错误。第一种方法:

var response = await http.post(uri, body: 
  'email': 'bob@email.com',
  'username': 'BoB',
  'password': 'password',
  'passwordConfirm': 'password',
);

我得到Error: XMLHttpRequest error. 这样做。当我尝试在 http.post 函数中使用这种方法设置标头时,我收到了Error: Bad state: Cannot set the body fields of a Request with content-type "application/json".

headers: <String, String>'content-type': 'application/json',,

在这个网站上阅读了一些之后,我遇到了第二种方法:

HttpClient httpClient = new HttpClient();
var jsonMap = 
  'email': 'bob@email.com',
  'username': 'BoB',
  'password': 'password',
  'passwordConfirm': 'password',
;
HttpClientRequest request = await httpClient.postUrl(uri);
request.headers.add('content-type', 'application/json');
request.add(utf8.encode(json.encode(jsonMap)));
HttpClientResponse response = await request.close();
httpClient.close();

希望第一种方法只是删除了一些必要的标头,但是这种方法产生了Error: Unsupported operation: Platform._version所以我尝试更新Flutter,但收到了同样的错误。

API 代码如下所示:

const functions = require("firebase-functions");
const signup = require("./handlers/signup");
const app = require("express")();
const cors = require("cors");
app.use(cors());

app.post("/signup", signup);

exports.api = functions.https.onRequest(app);

注册处理程序做的第一件事就是将请求记录到控制台,我尝试过的都没有做到这一点。

我正在使用 localhost 来提供 firebase 功能并运行颤振客户端。

我还尝试在 http.post 请求中发送纯文本/文本,并让处理程序将其解析为一个对象,以便与我已有的代码一起使用,但是,请求并没有发送到处理程序。我没有保存代码或以这种方式收到的错误。即使使用 Postman,我也无法使用这种方法。

感谢您的帮助。如果您需要更多信息,请告诉我。

【问题讨论】:

可能你需要让你的身体成为一个字符串。如果你先import 'dart:convert'; 然后http.post(uri, headers: headers, body: json.encode(body)); 呢? @daddygames 这仍然会导致 Error: XMLHttpRequest 错误。 没有任何请求发送到 api 【参考方案1】:

将内容类型设置为x-www-form-urlencoded 有效:

var response = await http.post(
  Uri.parse(
      'http://localhost:5000/fadenworlddev/us-central1/api/signup'),
  headers: <String, String>
    'Content-Type':
        'application/x-www-form-urlencoded; charset=UTF-8',
  ,
  body: <String, String>
    'username': 'BoB',
    'email': 'Bob@email.com',
    'password': 'password',
    'passwordConfirm': 'password',
  ,
);

【讨论】:

以上是关于使用颤振客户端向 node.js express api 发出 post 请求的主要内容,如果未能解决你的问题,请参考以下文章

Express/Passport 创建会话但不向前端发送 cookie

在客户端 Node.js 中包含 JQuery

IBM 向 Node.js 捐赠 Express 框架,为 Express 丑闻画上了句号

我可以在客户端使用 PostgreSQL (pg) (express/node.js)

如何为特定令牌、颤振、firebase 消息传递和 node.js 发送通知

Node.js + Express + Redis,何时关闭连接?