У меня проблема с приложением swiftUI, подключающимся к моему локальному node.js rest api.
У меня файл node.js работает на localhost, я даже заставил его запускать на https, но каждый раз вызовите URL-адрес получения, я получаю возвращаемое значение ноль. Также я просто тестирую это на локальном симуляторе.
Вот мое приложение. js файл
const express = require('express');
const https = require('https');
const fs = require('fs');
const app = express();
const morgan = require('morgan')
const mysql = require('mysql')
https.createServer({
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.cert')
}, app).listen(3000, () => {
console.log('Listening...')
})
app.use(morgan('combined'))
app.get("/", (req, res) => {
console.log("responding to root route")
res.send("Hello from roooooot")
})
app.get('/users/:username',(req,res) => {
console.log("Fetching user: " + req.params.username)
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'kneckt'
})
const username = req.params.username
const queryString = "SELECT * FROM kneckt.user WHERE username = ?"
connection.query(queryString,[username],(err, rows, fields) =>{
if(err){
console.log(err)
res.sendStatus(500)
return
}
console.log("I think we fetched users successfully")
const users = rows.map((row) => {
return{username: row.username,email: row.email}
})
res.json(users)
})
//res.end()
})
app.get("/users", (req, res) => {
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'kneckt'
})
const queryString = "SELECT * FROM kneckt.user"
connection.query(queryString,(err, rows, fields) =>{
if(err){
console.log(err)
res.sendStatus(500)
return
}
console.log("I think we fetched users successfully")
const users = rows.map((row) => {
return{username: row.username,email: row.email,id: row.userID, firstName: row.first_name,lastName:row.last_name,school: row.school,image:row.image,status: row.status}
})
res.json(users)
})
})
и вот мой быстрый файл с командой git:
class API {
var didChange = PassthroughSubject<API, Never>()
var friends = [Friend]() {
didSet {
didChange.send(self)
}
}
func getFriends(completion: @escaping ([Friend]) -> ()){
guard let url = URL(string: "https://localhost:3000/users") else { return }
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print("Hello for some reason nothing is being delivered")
return}
let friends = try! JSONDecoder().decode([Friend].self, from: data)
DispatchQueue.main.async {
self.friends = friends
}
}
.resume()
}
}
Я всегда получаю сообщение об ошибке «привет, по какой-то причине ничего не доставляется».
Любое понимание было бы замечательно.
Также я могу получить доступ к API на браузер на симуляторе ios, и он возвращает правильный json. Так что я чувствую, что это как-то связано с самим приложением.