swift Vapor - 操作无法完成。 (MySQL.Error 错误 4。)
swift Vapor - The operation couldn’t be completed. (MySQL.Error error 4.)
我不断收到此错误。
我正在确认 mysql 服务器是 运行 在我的 MAC 机器上,我已经在 mysql 服务器中为这个项目创建了一个数据库。
- Below is my main.swift
import Vapor
import VaporMySQL
let drop = Droplet()
try drop.addProvider(VaporMySQL.Provider.self)
drop.preparations = [Student.self]
let _ = HomeController(drop: drop)
drop.run()
- Below is my HomeController.swift
import Vapor
import HTTP
import Foundation
final class HomeController {
var drop: Droplet
init(drop: Droplet) {
self.drop = drop
let studentsGroup = self.drop.grouped("/")
studentsGroup.get(handler: homePageWithBankList)
}
func homePageWithBankList(request: Request) throws -> ResponseRepresentable {
do {
var student = Student()
student.name = "name"
try student.save() // Here error raise
} catch {
print(error.localizedDescription) // Getting error log here
}
return ""
}
}
- Below is my Student.swift model class
import Vapor
final class Student: Model {
var id: Node?
var exists: Bool = false
var name: String = ""
init() {
self.id = nil
}
init(node: Node, in context: Context) throws {
id = try node.extract("id")
name = try node.extract("name")
}
public func makeNode(context: Context) throws -> Node {
return try Node(node:[
"id": id,
"name": name
])
}
static func prepare(_ database: Database) throws {
try database.create("student") { student in
student.id()
student.string("name")
}
}
static func revert(_ database: Database) throws {
try database.delete("student")
}
}
- Below is mysql.json config file
{
"host": "localhost",
"user": "root",
"password": "admin",
"database": "studentsDB",
"port": "3306",
"encoding": "utf8"
}
- Below are my package dependencies
dependencies: [
.Package(url: "https://github.com/vapor/vapor.git", majorVersion: 1, minor: 5),
.Package(url: "https://github.com/vapor/mysql-provider.git", majorVersion: 1, minor: 1)
]
- Below is running mysql --version on my MAC
mysql Ver 14.14 Distrib 5.7.17, for osx10.12 (x86_64) using EditLine wrapper
EDIT:- I have this project on GitHub >>Here<<
所以这是初学者的错误:)
首先,改变
do {
var student = Student()
student.name = "name"
try student.save() // Here error raise
} catch {
print(error.localizedDescription) // Getting error log here
}
到
var student = Student()
student.name = "name"
do {
try student.save()
} catch {
print(error)
}
看看哪里出了问题
因此,您尝试使用 students - table 但在准备过程中创建了 student。
改变
try database.create("student") { student in } ...
至
try database.create("students") { student in } ...
否则,您可以在模型声明中指定 table名称
final class Student: Model {
static var entity = "student"
...
}
看看文档总是好的
我不断收到此错误。
我正在确认 mysql 服务器是 运行 在我的 MAC 机器上,我已经在 mysql 服务器中为这个项目创建了一个数据库。
- Below is my main.swift
import Vapor
import VaporMySQL
let drop = Droplet()
try drop.addProvider(VaporMySQL.Provider.self)
drop.preparations = [Student.self]
let _ = HomeController(drop: drop)
drop.run()
- Below is my HomeController.swift
import Vapor
import HTTP
import Foundation
final class HomeController {
var drop: Droplet
init(drop: Droplet) {
self.drop = drop
let studentsGroup = self.drop.grouped("/")
studentsGroup.get(handler: homePageWithBankList)
}
func homePageWithBankList(request: Request) throws -> ResponseRepresentable {
do {
var student = Student()
student.name = "name"
try student.save() // Here error raise
} catch {
print(error.localizedDescription) // Getting error log here
}
return ""
}
}
- Below is my Student.swift model class
import Vapor
final class Student: Model {
var id: Node?
var exists: Bool = false
var name: String = ""
init() {
self.id = nil
}
init(node: Node, in context: Context) throws {
id = try node.extract("id")
name = try node.extract("name")
}
public func makeNode(context: Context) throws -> Node {
return try Node(node:[
"id": id,
"name": name
])
}
static func prepare(_ database: Database) throws {
try database.create("student") { student in
student.id()
student.string("name")
}
}
static func revert(_ database: Database) throws {
try database.delete("student")
}
}
- Below is mysql.json config file
{
"host": "localhost",
"user": "root",
"password": "admin",
"database": "studentsDB",
"port": "3306",
"encoding": "utf8"
}
- Below are my package dependencies
dependencies: [
.Package(url: "https://github.com/vapor/vapor.git", majorVersion: 1, minor: 5),
.Package(url: "https://github.com/vapor/mysql-provider.git", majorVersion: 1, minor: 1)
]
- Below is running mysql --version on my MAC
mysql Ver 14.14 Distrib 5.7.17, for osx10.12 (x86_64) using EditLine wrapper
EDIT:- I have this project on GitHub >>Here<<
所以这是初学者的错误:)
首先,改变
do {
var student = Student()
student.name = "name"
try student.save() // Here error raise
} catch {
print(error.localizedDescription) // Getting error log here
}
到
var student = Student()
student.name = "name"
do {
try student.save()
} catch {
print(error)
}
看看哪里出了问题
因此,您尝试使用 students - table 但在准备过程中创建了 student。
改变
try database.create("student") { student in } ...
至
try database.create("students") { student in } ...
否则,您可以在模型声明中指定 table名称
final class Student: Model {
static var entity = "student"
...
}
看看文档总是好的