пустое тело запроса swift

#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, если это не сработает немедленно