Connect Mysql Nodejs: Convert callback to async/await

Nội dung bài viết

Video học lập trình mỗi ngày

Mysql nodejs thêm Expressjs là một kết hợp hoàn hảo để chúng ta có thể tạo dựng cho mình một blogs nhanh chóng. Mở rộng hơn về kết hợp này thì những lập trình viên có thể sử dụng những công cụ này để có thể phát triển cơ sở hạ tầng để phát triển một REST ful dành cho nhiều ứng dụng.

Trong bài viết này tôi sẽ hướng dẫn cho các bạn cách connect mysql nodejs một cách hiện đại thông qua async-await. Hy vọng bài viết này sẽ giúp các bạn có một cách connect ngắn gọn và có thể sử dụng linh hoạt hơn cách cũ đó là callback.

Yêu cầu người đọc Mysql Nodejs:

  • Hiểu biết về nodejs, install...
  • Hiểu biết về mysql, install...
  • Hiểu biết về sự khác biệt giữa callback và promise

Connect mysql nodejs

Trước tiên, thỉnh thoảng tôi vẫn bắt gặp một số example trên github hay ở đâu đó, điều đó có nghĩa rằng, đó chỉ là một hướng dẫn cơ bản cho nhưng bạn lập trình nhập môn. Hoặc nói rõ hơn là dành cho những bạn tập làm quen với nodejs khi làm việc với cơ sở dữ liệu, và cách đó thường gọi là callback. Bạn có thể nhìn code một cách rõ hơn về cách connect sử dụng callback.

npm i -S mysql

Sau khi cài đặt mysql, chúng ta có thể viết mã cơ bản để kết nối với cơ sở dữ liệu và sau đó lấy một số dữ liệu từ một bảng. Nó có thể được viết như sau:

const mysql = require('mysql');

// Get the Host from Environment or use default
const host = process.env.DB_HOST || 'localhost';

// Get the User for DB from Environment or use default
const user = process.env.DB_USER || 'root';

// Get the Password for DB from Environment or use default
const password = process.env.DB_PASS || '';

// Get the Database from Environment or use default
const database = process.env.DB_DATABASE || 'twitter_clone';

// Create the connection with required details
const con = mysql.createConnection({
  host, user, password, database,
});

const query = "SELECT * FROM tweets";
 
// make to connection to the database.
con.connect(function(err) {
  if (err) throw err;

  // if connection is successful
  con.query(query, (err, result, fields) => {
    // if any error while executing above query, throw error
    if (err) throw err;

    // if there is no error, you have the result
    console.log(result);
 });
});

Qua ví dụ trên các bạn có thể thấy việc sử dụng callback rất dài dòng, ở đây tôi không có ý định chê bai callback nhưng ở một số trường hợp như thế này việc sử dụng callback nên tránh.

Do đó, tôi sẽ hướng dẫn cho các bạn convert từ callback sang async-await.

Khi bạn đọc đến đây tôi share cho các bạn một hướng dẫn về cách convert callback to async-await in nodejs. Bạn có thể tìm đọc lại bài đó.

Và bây giờ chúng ta sang một code mới đó là sử dụng async-await

Nodejs mysql async/await

Nodejs connect database mysql bạn có thể thấy đấy, khi search từ khoá này trên google thì sẽ có nhiều phương án và kết qủa, chứng tỏ nhiều devjs vẫn đang tìm cách này. bắt đầu nhé.
Chút nữa thì quên, ở đây là chỉ nói về Mysql Nodejs, nếu bạn đang quan tâm về mongodb nodejs thì có thể đọc bài viết này: Find mongoose - sử dụng async await thay thế cho callback.

Nhưng hay chú ý đến những sai lầm khi sử dụng async-await đấy.

// connect
const mysql = require('mysql');

module.exports = async (params) => new Promise(
(resolve, reject) => {
	const connection = mysql.createConnection(params);
  connection.connect(error => {
	  if (error) {
      reject(error);
      return;
    }
    resolve(connection);
  })
});

Ở những dòng code trên bạn có thể sử dụng chúng để lấy một connect. Ở đầu bài tôi có nói về yêu cầu những người đọc bài viết này. Nên không giải thích nhiều ở đây.

// query
module.exports = async (conn, q, params) => new Promise(
(resolve, reject) => {
  const handler = (error, result) => {
	  if (error) {
      reject(error);
      return;
    }
    resolve(result);
  }
  conn.query(q, params, handler);
});

Nodejs mysql async/await: Cách sử dụng

const express = require('express')

const dbConfig = require('./dbConfig');
// ↑ exports = {user, password, host, databse}

const connection = require('./helpers/connection');
const query = require('./helpers/query');

const app = express()
const port = 3000;

app.get('/', (req, res) => res.send('Hello World!'))

app.get('/list', async (req, res) => {
  const conn = await connection(dbConfig).catch(e => {}) 
  const results = await query(conn, 'SELECT * FROM tweets').catch(console.log);
  res.json({ results });
})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

Như vậy là hướng dẫn này nhanh và gọn nhưng đủ tinh tế danh cho các bạn muốn tìm hiểu nhiều hơn về Connect MySql.

Có thể bạn đã bị missing