Я создаю приложение для iOS, которое подключается к серверу NodeJS. Метод 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': ''}
Я также пытался использовать красивую печать, и это было результатом:
{ '{\n "email" : "username@username.com",\n "username" : "username",\n "password" : "username"\n}': '' }
Любая помощь приветствуется. Спасибо!
EDIT:
Я попробовал предложения Майка Таверна.
Я изменил код сервера, чтобы использовать это вместо:
app.use(bodyParser.json());
Но я получаю пустое тело от симулятора.
Я также добавил их в быстрый код:
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
Но сервер также получает пустое тело, и под пустым телом я подразумеваю, что данные, которые я пытаюсь отправить, принимаются сервером как пустые. Когда я проверяю httpBody, данные там, но по какой-то причине сервер их не получает.