【问题标题】:How can i fetch data from mysql and render it with nodejs and javascript? [closed]我如何从 mysql 获取数据并使用 nodejs 和 javascript 呈现它? [关闭]
【发布时间】:2019-03-03 04:07:33
【问题描述】:

求救问题请: 我想制作一个简单的 todo 应用程序来添加一个 todo 任务并将其保存在数据库 mysql 中,就像这个链接一样: https://www.w3schools.com/howto/howto_js_todolist.asp

但我想将数据保存在 mysql 数据库而不是 li html 标记中,并在单击添加(提交按钮)时直接呈现它,就像上面的例子一样!! 问题是我找不到可以在 nodejs 中创建新 li 元素的方法,或者在我连接数据库后我可以处理数据行的方法! 任何人有一个提示请!求救

【问题讨论】:

标签: javascript mysql node.js fetch-api


【解决方案1】:

您好,欢迎来到 SO!

我不确定我是否理解您要完成的工作,但一般来说,您的数据流应该是这样的:

在数据库中存储数据:

  • 在按钮上添加事件处理程序,它将使用 JS 获取您输入的任务字符串,将其存储在变量中并使用 REST API(例如 XMLHttpRequest)将此变量传递到您的服务器(Express 是好的 nodejs FW)
  • 服务器现在连接到 Pool 并将数据发送到特定表,一旦完成,您将收到来自服务器的 HTTP 响应

从数据库中获取数据:

  • 使用相同的按钮事件处理程序 - 在收到 http200 后 - 您开始创建
  • 元素使用 JS 并附加您收到的字符串作为响应以及 http 状态。

令人困惑的部分 - 当您想要实现的一切都是将新任务附加到表单下方的任务列表时,为什么还要使用数据库?

编辑以进一步解释 API 数据流:

前端:

首先,您需要为您的按钮设置点击处理程序:

<button type="button" onclick="createNewProject()">Click Me!</button>

它会调用类似的函数:

let createNewProject = () => {
const xhr = new XMLHttpRequest() //REST API: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
const method = "post" //HTTP request method: https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
const uri = "/createnewproject" //URI which you use to communicate with backend

//putting data you want to send to server together: 
newProject = {}
newProject.project_name = document.getElementById("modal_project_name").value
newProject.project_description = document.getElementById("modal_project_description").value

//send REST request: 
xhr.open(method, uri)
xhr.setRequestHeader("Content-Type", "application/json")
xhr.send(JSON.stringify(newProject))

//receive response from server and handle it on frontend: 
xhr.onreadystatechange = function () {
    if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
        //do whatever your frontend needs to do
    }
}

服务器:

// please note that HTTP request type and URI do match with frontend
app.post("/saveproject", (req, res) => {
    let savedProject = req.body; //get data from frontend
    persistence.saveProject(savedProject, status => {
        res.status(status).send(); //send to persistence
    });
});

持久性:

在这里使用 PG。您将需要使用您的数据库服务器和连接的地址创建连接配置文件(基于数据库类型,遵循文档),当然还需要在节点端导入任何需要导入的内容。

module.exports.createNewProject = (newProject, callback) => {
// queryText: SQL query
// queryValues: your data
const queryText = "INSERT INTO projects (project_name, project_description, project_statuses_id, updated_date) VALUES ($1, $2, (SELECT id FROM project_statuses WHERE project_status = 'active'), $3)"
const queryValues = [
    newProject.project_name,
    newProject.project_description,
    newProject.updated_date
]

pool.connect((err, client, done) => {
    if (err) {
        console.log("PERSISTENCE: ", err)
        done(err)
        callback(400)
        return console.error("POOL CONNECTION ERROR", err.code)
    }
    client.query(queryText, queryValues, (err, result) => {
        if (err) {
            console.log("PERSISTENCE: ", err)
            done(err)
            callback(400)
            return console.error("QUERY ERROR", err.code)
        }
        done()
        callback(200) //return HTTP response back to frontend https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
    })
})

【讨论】:

  • 感谢您的反馈,我使用 express js FW,我知道如何连接到服务器和我的数据库,但是服务器如何将数据发送到特定表?!因为我不能在 nodejs 中使用 like (document.createElement) .. DOM 和后端问题,所以请你举个例子,(如何处理 nodejs 中 li 元素中的数据输出),
  • @ShadiAmr express 没有连接到服务器,express IS 服务器。您创建与数据库的池连接,检查文档并让我知道是否有任何问题。 Express(或服务器)不会创建元素,您会在前端收到来自服务器 API 的响应 - 而前端是您管理 html 的地方。让我知道它是否没有意义。
  • 好吧,听起来很完美,但在最后一步:module.exports = getConnection;我可以在前端 js 文件中接收这个来制作我的布局 html 吗?
  • @ShadiAmr 我编辑了我的帖子以进一步解释,希望对您有所帮助。
  • 无论如何,我会尝试并告诉你发生了什么,谢谢男人
猜你喜欢
  • 2019-06-15
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2021-03-11
  • 2021-12-31
相关资源
最近更新 更多