javascript - 使用颤振客户端向 node.js express api 发出 post 请求
问题描述
这是我的第一个问题,所以我为这个平台上的任何菜鸟错误提前道歉。
我正在使用 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.
这样做了。Error: Bad state: Cannot set the body fields of a Request with content-type "application/json".
当我尝试在 http.post 函数中使用这种方法设置标头时,我收到了:
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,我也无法使用这种方法。
谢谢您的帮助。如果您需要更多信息,请告诉我。
解决方案
将内容类型设置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',
},
);
推荐阅读
- typescript - 如何修复 no-unsafe-any 规则?
- ios - 如何在 Swift 中使用查询语句检索数据?
- elasticsearch - ElasticSearch 词袋字段匹配
- php - Laravel Nova 从 web.php 文件路由到 nova 中的 api.php 路由文件
- sql - 使用标识列在两个 SQL 数据库之间迁移数据
- android - android中当前和过去日期的日期差计时器
- r - 从浏览器获取下载目录
- javascript - 如何正确解除绑定元素?
- php - Aramex 费率计算器 API 返回 ERR52 - 邮政编码不可用的服务提供
- python - 比较 Pandas 系列中的前一个值和下一个值