gpt4 book ai didi

javascript - 请将回调函数的事件路径分解为ORM文件

转载 作者:行者123 更新时间:2023-11-29 18:31:20 26 4
gpt4 key购买 nike

我的任务是使用类的对象关系映射 (ORM) 创建一个小型应用程序。这是一个相当简单的应用程序,它接受客户端输入,将其放入数据库中并将其显示回客户端。

但是,当我们在 3 个文件之间传递代码时,我很难理解所发生情况的细节。有一个 burgers-controller.js 文件需要一个 burgers.js 文件,而该文件又需要 orm.js 文件。对于任何想要查看完整代码的人,您可以在我的 Github 上找到它。 .

我得到了使用 ORM 和模块化所有内容的推理和好处,但我需要有人来分解代码内部发生的事情以及按什么顺序。

因此,在 burgers-controller.js 文件中,我们有以下代码。

router.get("/", (req, res)=>{

burgers.selectAll((result)=>{
let handlebarsObj = {
burgers: result
}
res.render("index", handlebarsObj)
});
})

然后在 burgers.js 中我们有以下代码。

let burgers = {
selectAll: (callback)=>{
orm.selectAll("burgers", (result)=>{
callback(result);
})
}
}

最后在 orm.js 中我们有了。

let orm = {

selectAll: (tableName, callback)=>{
let queryString = "SELECT * FROM ??"

connection.query(queryString, tableName, (err, data)=>{
if (err){console.error("ERROR: " + err.stack)}
callback(data)
})
}
}

ORM 文件已连接到 MySQL 数据库。

您能解释一下这里发生了什么以及按什么顺序吗?

最佳答案

我想我明白了,尽管这是在黑暗中拍摄,因为在您的描述中没有表明实际错误是什么。如果有错误请原谅。

来自 burgers-controller.js 发送到 burgers.selectAll() 的回调在 burgers.js 内执行。执行时在 burgers.js 内而不是在 burgers-controller.js 内,它无法访问 res 对象,该对象仅存在于 burgers 中-controller.js.

我们可以使用 Promise 来解决问题。我将在这里使用 native 包,但您可以自由使用任何其他包(例如: bluebird ):

// burgers-controller.js
router.get('/', (req, res)=> {
burgers
.selectAll()
.then((result) => {
let handlebarsObj = {
burgers: result
}
res.render('index', handlebarsObj)
})
})

// burgers.js
let burgers = {
selectAll: () => {
return new Promise((resolve, reject) => {
orm.selectAll('burgers', (result) => {
resolve(result)
})
})
}
}

你可以在任何地方使用 promise 来更优雅地处理失败:

// burgers-controller.js
router.get('/', (req, res)=> {
burgers
.selectAll()
.then((result) => {
let handlebarsObj = {
burgers: result
}
res.render('index', handlebarsObj)
})
.catch((err) => {
let errMsg = {
message: err.message,
error: err
}
res.render('index', errMsg)
})
})

// burgers.js
let burgers = {
selectAll: () => {
return new Promise((resolve, reject) => {
orm
.selectAll('burgers')
.then((result) => {
resolve(result)
})
.catch((err) => {
reject(err)
})
})
}
}

// orm.js
let orm = {
selectAll: (tableName) => {
return new Promise((resolve, reject) => {
let queryString = "SELECT * FROM ??"

connection.query(queryString, tableName, (err, data)=>{
if (err) {
console.error("ERROR: " + err.stack)
reject(err)
} else {
resolve(data)
}
})
})
}
}

关于javascript - 请将回调函数的事件路径分解为ORM文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45666524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com