首页 > 解决方案 > Node js网站+ sql:插入/更新用户名(键)和表上的分数

问题描述

我正在开发一个包含 HTML、javascript、node js 和 MySQL 的测验网站。在第一页上,我保存了用户名 (savingName.html)。下一页是测验(quiz.html + quiz.js),其中积分累积,然后是我将结果保存在表格上的结果页面(results.html + results.js)。数据将保存在具有列名称(主键)、积分和获得积分的级别的表格中。

我已经尝试了很多方法:

  1. 首先将名称保存在桌子上。问题:当我尝试保存分数(在其他 javascript 页面上生成)时,它给出了一个错误,指出名称不能为空。

  2. 我做了一个测试,我合并了“savingName.html”和“results.html”,所有数据(名称、点数和级别信息)都成功保存在表上。但是,我无法在每次显示结果时都向用户询问姓名,因此我需要在不同的页面上询问姓名,然后保存与该姓名关联的分数。

问题:如何保存最先给出的用户名和之后生成的分数?

保存名称代码:

const addBtn = document.querySelector('#add-name-btn');

addBtn.onclick = function (){
    const nameInput = document.querySelector('#name-input');

    const name = nameInput.value;
    nameInput.value = "";
}
      <div class="container text-center rowExpNivel">
        <div class="cartao mx-auto">
          <div class="row">
            <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12 text-center meio">
              <label for="nome_utilizador" class="pretoTi">Escreve aqui o teu nome:</label>
            </div>
          </div>
          <div class="row">
            <div class="col-11 col-sm-10 col-md-8 col-lg-8 col-xl-8 text-center meio mx-auto">
              <form action="niveis.html" onclick="guardarNome()">
                <br>
                <label>Escreve aqui o seu nome:</label>
                <input type="text" id="name-input">
                <button id="add-name-btn">Add Name</button>
              </form>

              <br>
              <p>* O nome introduzido vai ser utilizado para o certificado final </p>
            </div>
          </div>
    
      </div>

      

    <script src="savingName.js"></script>

保存分数javascript摘要代码:

        var score = points;
        var actualLevel = nivel;
        var user = addBtn.name;


        
            fetch('/pontos', {
                headers: {
                    'Content-type': 'application/json'
                },
                method: 'POST',
                body: JSON.stringify({user,score,actualLevel})
            })
            .then(response => response.json());

(app.js) 'app.js' 代码 (Node JS) 上的 Post 方法:

app.post('/pontos', (request, response) => {
    const {user} = request.body;
    const {score} = request.body;
    const {actualLevel} = request.body;

    const db = dbService.getDbServiceInstance();

    const result = db.insertPoints(user,score,actualLevel);


    result.then(data => response.json({success: true})).catch(err => console.log(err));
   
});

(databaseService.js) 对上一页“app.js”(Node JS)调用的函数的 SQL 查询:

    async insertPoints(user,score,actualLevel) {

        try{
            const response = await new Promise((resolve, reject) => {

                const query = "INSERT INTO quizData (user,score, actualLevel) VALUES (?,?,?) ON DUPLICATE KEY UPDATE name=VALUES(name),score = VALUES(score), actualLevel = VALUES(actualLevel);";

                connection.query(query, [user,score,actualLevel] , (err, result) => {
                    if (err) reject(new Error(err.message));
                    resolve(result);
                });
        });
        return response;
        }catch (error){
            console.log(error);
        }
    }

您能否举个例子来帮助我是否可以将这些数据成功保存在数据库中?我已经做了很多研究,但没有成功。

非常感谢!

标签: javascripthtmlsqlnode.js

解决方案


推荐阅读