使用颤振客户端向 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
IBM 向 Node.js 捐赠 Express 框架,为 Express 丑闻画上了句号
我可以在客户端使用 PostgreSQL (pg) (express/node.js)