Node.js JSONSerialization生成不正确的JSON对象。敏捷的
我正在创建一个连接到NodeJS服务器的iOS应用程序。get方法工作正常,但POST方法存在问题Node.js JSONSerialization生成不正确的JSON对象。敏捷的,node.js,json,swift,Node.js,Json,Swift,我正在创建一个连接到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.co
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数据:
{{“电子邮件”:username@username.com“,”用户名“:”用户名“,”密码“:”用户名“}”:“'}
这就是我想要的:
{“电子邮件”:username@username.com“,”用户名“:”用户名“,”密码“:”用户名“}
这是服务器代码的一部分:
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}': '' }
感谢您的帮助。谢谢大家!
编辑:
我试过迈克·塔凡纳的建议。
我将服务器代码改为使用此代码:
app.use(bodyParser.json());
但我从模拟器收到一个空的身体。
我还在swift代码中添加了以下内容:
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
但是服务器也会收到一个空的主体,我所说的空主体是指我试图发送的数据被服务器接收为空的。当我检查httpBody时,数据在那里,但由于某种原因服务器没有接收到它。我相信您的Swift代码是正确的。当我在操场上做这件事时:
print(String(data: urlRequest.httpBody!, encoding: String.Encoding.utf8)!)
它印刷了:
{"username":"username","password":"username","email":"username@username.com"}
我不是主体解析器方面的专家,但我认为:
bodyParser.urlencoded({extended: true})
您应该使用以下选项:
bodyParser.json([options]) //not sure which options exactly you need
您可能还需要设置
内容类型:application/json
标题。有关更多信息,请参阅。我通过更改数据本身解决了此问题。我没有强迫它传递JSON,而是将其作为使用UTF8编码的字符串传递
let dataString = "username=username&password=username&email=username@username.com"
urlRequest.httpBody = dataString.data(using: .utf8)
我用这篇文章中的方法得到了答案:
您可以使用Codable进行Json解析。它易于使用且灵活。我尝试使用bodyParser.json()和不同的选项,并设置头,例如urlRequest.addValue(“application/json”,forHTTPHeaderField:“Content Type”)urlRequest.addValue(“application/json”,forHTTPHeaderField:“Accept”)。我混合并匹配了这些更改,但每次我进行任何更改时,我的服务器都会收到一个空正文{}。