【问题标题】:connecting to mysql from ejs file从 ejs 文件连接到 mysql
【发布时间】:2015-11-30 11:53:16
【问题描述】:

我是 node.js 的新手,正在尝试学习如何从 ejs 文件连接到 mysql 数据库。我试图搜索示例代码,但代码不起作用。有人可以帮我检查一下。谢谢。

function loaddata() {

          var sql = require("mysql");
          var con = mysql.createConnection({});
          con.connect(function (err) {
              if (err) {
                  console.log('Error connecting to Db');
                  return;
              }
              console.log('Connection established');
          });
          con.query('update students set name="sus" where email="smn14@mail.aub.edu"', function (err, rows) {
              if (err) throw err;

              console.log('Data received from Db:\n');
              console.log(rows);
          });
          con.end(function (err) {
              // The connection is terminated gracefully
              // Ensures all previously enqueued queries are still
              // before sending a COM_QUIT packet to the MySQL server.
          });


      }

【问题讨论】:

  • 您能否将您在运行代码时收到的错误消息告诉我们。
  • 没有错误信息。它只是不更新​​数据库

标签: javascript mysql node.js


【解决方案1】:

创建连接最差。

 var mysql      = require('mysql'); 
 var connection = mysql.createConnection({   
     host : 'localhost',
     user : 'me', 
     password : 'secret',   
     database : 'my_db' 
 });     
 connection.connect();     
 connection.query('SELECT 1 + 1 AS solution', function(err, rows,
 fields) {   
     if (err) throw err;     
     console.log('The solution is: ', rows[0].solution); });     
 connection.end();

从这个例子中,你可以了解到以下内容:

Every method you invoke on a connection is queued and executed in sequence.
Closing the connection is done using end() which makes sure all remaining queries are executed before sending a quit packet to the

mysql 服务器。

Docs

【讨论】:

  • @suraya nasser 你写了“......如何从 ejs 文件连接到 mysql 数据库......?” @BrTkCa 真的可以从 ejs 文件建立新的 SQL 连接吗?当我尝试时,出现消息Uncaught ReferenceError: require is not defined
  • Actullay 不是@Freitz。我刚刚意识到我的答案在 15 年并不完整,但 EJS 文件是 Express/Node 的模板引擎,因此它只接受前端和 EJS 代码。 MySQL 连接应该写在 Node.JS 脚本文件上。
【解决方案2】:

我现在了解服务器/客户端的过程。有道理,否则您将能够看到存储在 Client.js 中的数据库密码。 :-)

但是,有一种方法对我有用。客户端调用 javascript 函数并向服务器发送消息。服务器收到此消息并启动数据库查询。通过 socket.io 将结果发送给所有客户端

在文件中的客户端.ejs

<script type='text/javascript'>

  let socket = io.connect();

  function getSql(userId) {
    socket.emit('start-new-sql-querie',{
        userId: userId
    });
  }

  socket.on('new-sql-result', function (data){ // listen for the new sql result
      console.log(data.userStatus); // foo something with the new data
  })

</script>

<button onclick="getSql(1)">Test sql query</button>

服务器端的数据库 connection.js

const connection = {
    connectionLimit: 10,
    host: "localhost",
    user: "Abc",
    password: "1234",
    database: "d001",
    multipleStatements: true
};

module.exports = connection;

服务器端的 yourapp.js

const express = require('express'); 
const port = process.env.PORT || 1234;
const app = express();
const server = require('http').createServer(app);
const mysql = require('mysql2');
const config = require('./routes/connection'); // SQL-Connection
const pool = mysql.createPool(config);

let io = require('socket.io')(server);

io.sockets.on('connection', function(socket) {

  socket.on('start-new-sql-querie', function(data) { // listen from the clients

    let user_id = data.userId;
    sql_test.getConnection((error, connection) => { // Connect to sql database
      console.log("user_id: ", user_id)
      connection.query(`SELECT * FROM user WHERE id='${user_id}'`, (err, result) => {
        socket.emit('new-sql-result',{ // send sql result-status to all clients
          userStatus: result.result[0].status
        })
      })
      connection.release();
    })

  });

})

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2018-08-07
    • 2013-11-03
    • 2017-12-11
    相关资源
    最近更新 更多