gpt4 book ai didi

node.js - JSONSerialization 生成不正确的 JSON 对象。 swift

转载 作者:行者123 更新时间:2023-11-28 05:50:43 25 4
gpt4 key购买 nike

我正在创建一个连接到 NodeJS 服务器的 iOS 应用程序。 get 方法工作正常,但 POST 方法有问题。

var urlRequest = URLRequest(url: "http://localhost:3000/register")
urlRequest.httpMethod = "POST"
let info: [String:Any] = ["username": "username", "password":"username", "email":"username@username.com"]
do {
let jsonInfo = try
JSONSerialization.data(withJSONObject: info, options[])
urlRequest.httpBody = jsonInfo
} catch {
print("ERROR")
return
}

请求已发送,但 JSONSerialization 出现问题,因为这是服务器获取的 JSON 数据:{'{"email":"username@username.com","username":"username","password":"username"}': ''

这就是我要做的:{"email":"username@username.com","username":"username","password":"username"}

这是服务器代码的一部分:

const express = require('express');
const bodyParser = require('body-parser');
var app = express();
var allowMethods = function(req, res, next) {
res.header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, DELETE');
next();
}
http.createServer(app).listen(3001);
console.log("Server started");
app.use(bodyParser.urlencoded({extended: true}));
app.use(allowMethods);

const _ = require('lodash');
let b = _.pick(req.body, ['username', 'password', 'email']);

关于我做错了什么的任何想法?如果可能的话,我想避免使用 alamofire。我试过改变字典的格式,但结果总是这样:

{ 'the whole dictionary is the key': ''}

我也尝试过使用 pretty-print ,结果是这样的:

{ '{\n  "email" : "username@username.com",\n  "username" : "username",\n  "password" : "username"\n}': '' }

感谢任何帮助。谢谢!

编辑:

我尝试了 Mike Taverne 的建议。我更改了服务器代码以改为使用它:

app.use(bodyParser.json());

但是我从模拟器收到一个空的 body 。我还将这些添加到 swift 代码中:

urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")

但是服务器也接收到一个空体,空体我的意思是我试图发送的数据被服务器接收为空。当我检查 httpBody 时,数据在那里,但由于某种原因服务器没有收到它。

最佳答案

我相信您的 Swift 代码没问题。当我在 Playground 上这样做时:

print(String(data: urlRequest.httpBody!, encoding: String.Encoding.utf8)!)

它打印了:

{"username":"username","password":"username","email":"username@username.com"}

我不是 body-parser 方面的专家,但我认为与其这样:

bodyParser.urlencoded({extended: true})

你应该使用这个:

bodyParser.json([options]) //not sure which options exactly you need

您可能还需要设置 Content-Type: application/json header 。引用body-parser documentation了解更多信息。

关于node.js - JSONSerialization 生成不正确的 JSON 对象。 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53056892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com