#ios #node.js #swift #networking
#iOS #node.js #swift #сеть
Вопрос:
У меня возникли проблемы с отправкой запроса post в мой api.Я установил безопасность транспорта приложения, чтобы разрешить локальную сеть. проблема в том, что тело запроса всегда пустое
Вот мой код swift
func createClient(client:Client) {
guard let url = URL(string: "http://localhost:3003/client_create") else {
print("Could not create URL.")
return
}
let requestLang: [String: Any] = ["nom_complet": client.nom_complet]
let requestBody = try? JSONSerialization.data(withJSONObject: requestLang)
var urlRequest = URLRequest(url: url)
urlRequest.httpBody = requestBody
urlRequest.httpMethod = "POST"
urlRequest.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
urlRequest.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Accept")
let session = URLSession.shared
let task = session.dataTask(with: urlRequest) {
data, response, error in
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
return
}
let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
if let responseJSON = responseJSON as? [String: Any] {
print(responseJSON)
}
}
task.resume()
}
Вот мой js-код узла
const express = require('express')
const app = express()
const mysql = require('mysql')
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({extended: true}) )
app.use(express.static('./public'))
function getConnection() {
return mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'expertDB'
})
}
var publicDir = require('path').join(__dirname,'/public');
app.use(express.static(publicDir));
app.post('/client_create', (req,res) => {
try{
const nom_complet = req.body.nom_complet
console.log("nom_complet: " nom_complet)
console.log("body " req.body)
const queryString = "INSERT INTO Client (nom_complet) VALUES (?)"
const connection = getConnection()
connection.query(queryString,[nom_complet],(err,results,fields) => {
if (err) {
console.log("failed to connect to server")
console.log(err)
res.sendStatus(500)
return
}
console.log('inserted a new client with id: ',results.insertedId);
res.end()
})
}catch(err){
console.log(err)
}
})
req.body возвращает empty и req.body. nom_complet возвращает undefined
Есть идеи, как это исправить?
Комментарии:
1. Откуда вы знаете, что оно пустое?
2. в моем node js rest api, когда я получаю тело запроса, я обнаружил, что оно пустое
3. Проверьте,
requestBody
пусто оно или нет, но ваш запрос выглядит нормально, поэтому он находится на вашем Node.js часть…4. Я уже проверил тело запроса, и оно пустое
5. Что.
let requestBody = try? JSONSerialization.data(withJSONObject: requestLang)
возвращает ноль? Что такоеclient.nom_complet
?
Ответ №1:
В моем случае это помогло:
app.use(bodyParser.json({ type: 'application/json' }))
вы можете попробовать удалить строку UTF8, где вы указываете application / json, и оставить только application / json, если это не сработает немедленно