Phương thức truy vấn javascript

Hướng dẫn SQL của chúng tôi sẽ hướng dẫn bạn cách sử dụng SQL trong. MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres và các hệ thống cơ sở dữ liệu khác

Bắt đầu học SQL ngay bây giờ »

Ví dụ trong mỗi chương

Với trình soạn thảo SQL trực tuyến của chúng tôi, bạn có thể chỉnh sửa câu lệnh SQL và nhấp vào nút để xem kết quả

Là một nhà phát triển JavaScript, bạn sẽ thường xuyên gặp trường hợp này, và thay vì tìm kiếm trên google cách chuyển đối tượng thành tham số chuỗi truy vấn, thì trong bài viết này chúng ta sẽ lướt qua những cách nhanh nhất và hiệu quả nhất.  


Thử nghiệm sự cố


Trong bài viết này, chúng ta sẽ cùng nhau chuyển đổi định dạng có giống như thế này không?

let obj = {
   id: 1234,
   search: 'query string parameters in JavaScript',
   token: '123412341341',
}

And variable objects on this format

https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341

Ở hướng dẫn này thì không khó hay suy nghĩ nhiều, ở đây tôi chỉ liệt kê cho các bạn những cách nhanh nhất có thể chứ không cần suy nghĩ hay có một vấn đề cao siêu gì ở đây.  

1 - Sử dụng map và join javascript

ES6

var queryString = Object.keys(params).map(key => key + '=' + params[key]).join('&');

ES5

var queryString = Object.keys(params).map(function(key) {
    return key + '=' + params[key]
}).join('&');

2 - Sử dụng jquery javascript

Bạn nào đang sử dụng jquery trên client thì có thể sử dụng chúng cho những task như thế này

var queryString = $.param(params);

3 - Sử dụng trong nút javascript

Nếu bạn đang sử dụng trong nút môi trường thì cũng có một cách nhanh và gọn. Đó là mô-đun chuỗi truy vấn trong nút

const querystring = require('querystring');
let queryString = querystring.stringify(params);

4 - javascript mã hóaURIThành phần

var queryString = Object.keys(params).map((key) => {
    return encodeURIComponent(key) + '=' + encodeURIComponent(params[key])
}).join('&');

Những mẹo này theo tôi bạn nên lưu vào một tệp Utils. Trong một vòng đời của một dev luôn có một tập tin Utils. Cho nên đây sẽ là một trong những mẹo cần ghi lại.  

Tôi muốn chạy một truy vấn SQL trong tệp. js. Tôi đã cố gắng thêm một số mã PHP vào nó nhưng tất nhiên là nó không hoạt động

Nội dung chính Hiển thị

  • Mẫu ứng dụng của chúng tôi
  • điều kiện tiên quyết
  • Xây dựng và khai thác ứng dụng Hello World
  • Loading data by SQL
  • ví dụ mysql
  • Knex - Tóm tắt SQL
  • Cài đặt Knex
  • Use Knex
  • Ánh xạ quan hệ đối tượng (ORM)
  • Sự phản đối
  • Ở đây, chúng tôi tìm tải 5 người dùng, sau đó cho từng người dùng đó, chúng tôi tìm tải nhận xét của họ và gán những người đó vào thuộc tính nhận xét của đối tượng người dùng của chúng tôi. In view/trang/index mode. ejs, tôi có thể hiển thị người dùng và nhận xét của họ như sau
  • Bạn có thể tìm thấy mã với những thay đổi này ở đây. Như thường lệ, cam kết và kết thúc quá trình phát triển
  • Next section
  • Installing section next
  • Use the next section
  • Trong trường hợp này, chúng tôi đã nói với phần tiếp theo rằng cơ sở dữ liệu củng cố lớp người dùng được gọi là 'người dùng' (theo mặc định, phần tiếp theo sẽ suy nghĩ rằng bảng được gọi là 'người dùng'
  • Chúng ta có thể chạy truy vấn SQL trong JavaScript không?
  • Bạn có thể viết SQL bằng HTML không?
  • SQL hay JavaScript cái nào tốt nhất?
  • JavaScript could not read database?

Tôi muốn chạy truy vấn SQL

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
4. Tôi muốn hiển thị giá trong biểu đồ. Có ai biết làm thế nào tôi có thể chạy truy vấn SQL này trong tệp. js để tôi có thể nhận được mục đánh giá từ cơ sở dữ liệu không?

Tôi đang sử dụng mã JavaScript sau

________số 8

Hình ảnh được sử dụng theo giấy phép từ Shutterstock. com

Nếu bạn đang phát triển các web ứng dụng, bạn gần như chắc chắn rằng sẽ liên tục tương tác với cơ sở dữ liệu. Và khi đến lúc chọn cách bạn tương tác, các lựa chọn có thể quá sức

Trong bài viết này, chúng tôi sẽ xem xét đánh giá chi tiết theo 5 cách khác nhau để tương tác với cơ sở dữ liệu của bạn bằng JavaScript và chúng tôi sẽ nói về những ưu và nhược điểm của từng người. Chúng tôi sẽ bắt đầu với sự lựa chọn thấp nhất-các lệnh SQL-sau đó chuyển qua các đối tượng cao cấp hơn

Chọn thư viện cơ sở dữ liệu phù hợp với ứng dụng JavaScript của bạn để có thể tác động đến khả năng duy trì, khả năng mở rộng và mã hiệu suất của bạn, vì vậy, nó đáng để dành một chút thời gian để

Mẫu ứng dụng của chúng tôi

Chúng tôi sẽ sử dụng một ứng dụng Express tầm thường được lưu trữ trên Heroku để làm ví dụ cho chúng tôi. Tất cả các mã cho bài viết này đều nằm trong kho GitHub này. Vui lòng thoải mái sao chép nó và làm theo

điều kiện tiên quyết

Để chạy ứng dụng mẫu, bạn sẽ cần phần mềm sau trên máy của bạn

  • Môi trường đầu cuối giống như UNIX (Mac OSX và Linux vẫn ổn định. Nếu bạn sử dụng Windows, bạn sẽ cần hệ thống con Windows cho Linux)
  • Git (và một tài khoản GitHub)
  • NPM (phiên bản 6 trở lên)
  • Heroku Tool line

Nếu bạn không có tài khoản Heroku, bạn cần phải đăng ký tài khoản miễn phí. Nếu bạn không muốn đăng ký Heroku, bạn cũng có thể chạy bộ ứng dụng cục bộ với một trường hợp nhất Postgres address. Nếu bạn cảm thấy thoải mái với điều đó, sẽ khá dễ dàng để thấy những thay đổi mà bạn cần thực hiện thay vì khai thác với Heroku

Khi bạn đã cài đặt tất cả các bên trên, hãy chạy

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
5 trong một thiết bị đầu cuối và bạn đã sẵn sàng để bắt đầu

Xây dựng và khai thác ứng dụng Hello World

Để bắt đầu, chúng tôi sẽ thiết lập những điều sau

  • Một ứng dụng Express tầm thường chỉ phục vụ một trang web Hello Hello, World World
  • Một nền tảng Postgres
  • Hai bảng, đại diện cho người dùng trên mạng và nhận xét của người dùng và người dùng (một người dùng có nhiều nhận xét)
  • Một số mẫu dữ liệu (trong trường hợp này, được tạo thông qua mockaroo. com)

Tôi đã tạo một mẫu ứng dụng sẽ thiết lập tất cả điều này cho bạn (miễn là bạn đã chạy

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
5 như đã được cập nhật ở trên). Để thiết lập nó, vui lòng thực hiện các lệnh sau từ dòng lệnh.
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
7____78

Điều này sẽ mất một vài phút để hoàn thành. Trong khi chờ đợi, bạn có thể xem Makefile để xem các lệnh có liên quan, thực hiện những điều sau đây

  • Tạo một ứng dụng Heroku mới
  • Add an postgres database
  • Exploit application for Heroku
  • Chạy lệnh trên Heroku để thiết lập bảng cơ sở dữ liệu và nhập dữ liệu mẫu CSV
  • Mở URL của ứng dụng Heroku của bạn trong cửa sổ duyệt mới

Vào cuối quá trình này, bạn sẽ thấy Hello Hello, world world trên một trang web

Loading data by SQL

OK - tôi đã thiết lập tất cả. Chúng tôi đã tạo ra một cơ sở dữ liệu với hai bảng và một số mẫu dữ liệu. Nhưng chúng tôi chưa làm gì với nó. Bước tiếp theo là cho phép ứng dụng web của chúng tôi truy xuất dữ liệu từ cơ sở dữ liệu

Bất kể khi nào bạn tương tác với cơ sở dữ liệu quan hệ, bạn sẽ làm như vậy bằng cách gửi lệnh SQL đến ổ cắm mạng mà cơ sở dữ liệu đang nghe. Điều này đúng với tất cả các thư viện mà chúng tôi sẽ xem xét trong bài viết này - ở mức độ thấp nhất, tất cả chúng đều gửi lệnh SQL đến cơ sở dữ liệu và truy xuất bất kỳ đầu ra nào trở lại

Vì vậy, lần đầu tiên chúng tôi sẽ xem xét khả năng tương tác với cơ sở dữ liệu của chúng tôi là làm điều đó - gửi các lệnh SQL. Để làm điều này, chúng tôi sẽ cài đặt thư viện PG JavaScript, cho phép chúng tôi gửi SQL đến cơ sở dữ liệu Postgres và truy xuất kết quả

Để cài đặt thư viện PG, hãy thực hiện lệnh sau

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
9

Điều này sẽ tìm tải và cài đặt thư viện, đồng thời bổ sung nó vào các gói tệp. json và pack-lock. json của bạn. Please to Lừa đảo cam kết những thay đổi đó

https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
40
https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
41

Để nói chuyện với cơ sở dữ liệu của chúng tôi, chúng tôi cần một số chi tiết

  • Tên máy chủ của máy Postgres đang chạy
  • Các cổng Postgres mạng đang lắng nghe
  • Tên của cơ sở dữ liệu Dữ liệu của chúng tôi đang ở
  • Tên người dùng và mật khẩu có quyền truy cập dữ liệu đó

Hầu hết các cơ sở dữ liệu của thư viện sẽ cho phép chúng tôi thiết lập kết nối bằng cách cung cấp một đối tượng cho thư viện có khóa và giá trị cho tất cả các chi tiết đó hoặc bằng cách kết hợp tất cả chúng vào một

Khi bạn thêm cơ sở dữ liệu vào ứng dụng Heroku, bạn sẽ tự động nhận một biến môi trường có tên là DataBase_URL, chứa tất cả các chi tiết bạn cần kết nối với cơ sở dữ liệu. You could see the value of your database your_url by way run

https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
42

Điều này sẽ xuất ra tất cả các biến môi trường mà ứng dụng của bạn có thể sử dụng. Chỉ nên có một cái cho bây giờ, vì vậy bạn nên thấy một cái gì đó như thế này trong đầu ra

Database_url

https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
43
https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
44
https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
44

Trong trường hợp ví dụ của chúng tôi, điều đó bị phá vỡ như thế này

SQL

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
3

Giá trị cơ sở dữ liệu của bạn_URL sẽ khác nhau, nhưng cấu trúc sẽ giống nhau

Bây giờ chúng tôi đã cài đặt thư viện PG và chúng tôi biết cách kết nối với cơ sở dữ liệu của chúng tôi, hãy thực hiện ví dụ đầu tiên về tương tác với cơ sở dữ liệu. Chúng tôi chỉ cần tìm tải danh sách người dùng và hiển thị chúng trên trang web của chúng tôi. At the header file index. js của chúng tôi, chúng tôi sẽ yêu cầu thư viện PG của chúng tôi và tạo các đối tượng kết nối cơ sở dữ liệu

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });

Trong khối

https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
45, chúng tôi sẽ thay đổi dòng Nhận để gọi một phương thức hiển thị danh sách người dùng từ cơ sở dữ liệu.
https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
46

Cuối cùng, chúng tôi sẽ thực hiện chức năng Listusers

JavaScript

https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
4

Mã này đợi cho đến khi kết nối được thiết lập cho cơ sở dữ liệu của chúng tôi, sau đó gửi truy vấn SQL bằng hàm truy vấn và lấy kết quả

Bây giờ, bước này có thể thất bại vì nhiều lý do khác nhau, vì vậy trong mã, chúng tôi kiểm tra để đảm bảo rằng chúng tôi đã có một số dữ liệu và nếu chúng tôi thực hiện, chúng tôi sẽ chỉ định kết quả. Vui lòng gửi cho người dùng chính của kết quả đối tượng của chúng tôi. Tiếp theo, chúng tôi chuyển kết quả cho chức năng đầu ra, sau đó phát hành kết nối cơ sở dữ liệu của chúng tôi

In view/trang/index mode. ejs, chúng tôi có quyền truy cập vào kết quả đối tượng, vì vậy chúng tôi có thể hiển thị dữ liệu người dùng của mình như thế này

HTML

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
8

Bạn có thể tìm thấy mã với những thay đổi này ở đây

https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
47 và
https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
48 là tên của hai cột từ bảng người dùng trong cơ sở dữ liệu của chúng tôi

Hãy phát triển các thay đổi này để chúng tôi có thể tìm thấy dữ liệu trong ứng dụng Heroku của chúng tôi

https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
49
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
80
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
81

Điều này sẽ mất một hoặc hai phút để khai thác. Khi lệnh đó đã thực hiện xong, hãy tải xuống trình duyệt của bạn và bạn sẽ thấy một danh sách người dùng trên trang web

ví dụ mysql

Ví dụ trên dành cho Postgres, nhưng mã cho các cơ sở dữ liệu quan hệ biến phổ biến khác nhau sẽ tương ứng với nhau. Ví dụ. nếu bạn đang sử dụng MySQL

  • Thay vì
    const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
    9 sử dụng
     /* Morris.js Charts */
      // Sales chart
      var area = new Morris.Area({
        element: 'revenue-chart',
        resize: true,
        data: [
          {y: '2016 Q1', item1: 5000, item2: 4460},
          {y: '2016 Q2', item1: 8432, item2: 5713}
        ],
        xkey: 'y',
        ykeys: ['item1', 'item2'],
        labels: ['Item 1', 'Item 2'],
        lineColors: ['#a0d0e0', '#3c8dbc'],
        hideHover: 'auto'
      });
      var line = new Morris.Line({
        element: 'line-chart',
        resize: true,
        data: [
          {y: '2015 Q4', item1: 0},
          {y: '2016 Q1', item1: 5000},
          {y: '2016 Q2', item1: 8432}
        ],
        xkey: 'y',
        ykeys: ['item1'],
        labels: ['Item 1'],
        lineColors: ['#efefef'],
        lineWidth: 2,
        hideHover: 'auto',
        gridTextColor: "#fff",
        gridStrokeWidth: 0.4,
        pointSize: 4,
        pointStrokeColors: ["#efefef"],
        gridLineColor: "#efefef",
        gridTextFamily: "Open Sans",
        gridTextSize: 10
      });
    
    83 (sử dụng MySQL2, không phải MySQL - MySQL2 nhanh hơn và hỗ trợ Async/Await)
  • Trọng chỉ số. js, bạn sẽ yêu cầu mysql như thế này
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
84
  • Chức năng Listusers sẽ trông như thế này

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
7

Lượt xem/trang/index. ejs vẫn giữ nguyên

Bạn có thể xem dự án mẫu với những thay đổi này ở đây

Bây giờ, hãy kiểm tra một vài thư viện được xây dựng trên nền tảng này, thêm các lớp vật liệu để cho phép bạn đọc và thao tác cơ sở dữ liệu theo cách giống như JavaScript giống như JavaScript

Cho đến nay, chúng tôi đã thấy cách gửi SQL RAW đến cơ sở dữ liệu;

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
85

Nếu chúng tôi muốn nhận được sự đánh giá của một cụ thể người dùng, hãy nói rằng người dùng đó có ID là 1, chúng tôi có thể sử dụng một cái gì đó như thế này

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
86

Không có gì sai khi tương tác với cơ sở dữ liệu của bạn theo cách này, nhưng nó có thể cảm thấy hơi cồng kềnh và nó yêu cầu bạn phải tiếp tục thay đổi bánh răng. Bạn nghĩ về mã JavaScript của mình theo một cách nào đó, nhưng khi bạn cần suy nghĩ về dữ liệu trong cơ sở dữ liệu của mình, bạn phải bắt đầu suy nghĩ trong SQL

Mục đích của phần còn lại của cơ sở dữ liệu thư viện mà chúng tôi sẽ xem xét là cho phép bạn xử lý dữ liệu trong cơ sở dữ liệu của mình giống như các đối tượng và mã JavaScript trong ứng dụng của bạn. Ngay bên dưới mui xe, đó là tất cả các SQL, nhưng bạn đã chiến thắng cần phải quan tâm đến nhiều điều đó trừ khi bạn muốn

Knex - Tóm tắt SQL

Thư viện đầu tiên mà chúng tôi sẽ nói là Knex. Trang tài liệu mô tả Knex là một người xây dựng truy vấn trực tuyến và mục tiêu của nó là cung cấp một lớp đối tượng trên SQL RAW đầu tiên

Cài đặt Knex

Knex yêu cầu PG (hoặc MySQL nếu bạn sử dụng cơ sở dữ liệu MySQL). Chúng tôi đã cài đặt PG, vì vậy chúng tôi chỉ cần thêm Knex như thế này

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
87
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
88
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
89

Use Knex

Trang NPM cho KNEX mô tả nó như một người xây dựng truy vấn của người Viking. Knex lệnh SQL ở mức định mức cao nhất, nhưng không xa lắm. Chúng ta vẫn cần hiểu cơ bản SQL, nhưng chúng ta có thể viết nó trong một cú pháp giống như JavaScript hơn, thay vì phải cắt và xúc SQL. Quan trọng hơn, chúng ta có thể sử dụng các thành phần để xâu chuỗi các thuật ngữ KNEX theo cách thoải mái hơn nhiều cho các thành viên lập trình JavaScript

Vì vậy, khi chúng tôi sử dụng PG, chúng tôi đã khẳng định điều này

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
70

Khi chúng ta sử dụng KNEX, chúng ta có thể viết điều này

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
71

Điều đó có thể không giống như một sự khác biệt, nhưng bởi vì cách chúng ta có thể tạo ra các cuộc gọi chức năng KNEX, chúng ta cũng có thể làm những công việc như thế này

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
72

Tại đây, chúng tôi nhận được 5 hồ sơ người dùng, bắt đầu ở vị trí 8 trong tổng số tất cả các bản ghi người dùng có thể phù hợp với truy vấn của tôi. Bạn có thể xem toàn bộ các tùy chọn có sẵn trong tài liệu KNEX

Hãy thay đổi ứng dụng Express của chúng tôi để sử dụng KNEX để hiển thị một số bản ghi từ cơ sở dữ liệu của chúng tôi. First, in index. js instead of two lines after

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
6

… With this one

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
7

Sau đó, thay đổi việc thực hiện

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
73 to this thing

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
9

Tệp/trang/trang của chúng tôi/chỉ mục. ejs could keep the main key like before here

Cam kết, phát triển và khai thác

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
74
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
75
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
81

Khi bạn làm mới trình duyệt của mình, bạn sẽ thấy bản ghi người dùng từ 6 đến 10 trên trang

Bạn có thể tìm thấy mã với những thay đổi này ở đây

Ánh xạ quan hệ đối tượng (ORM)

Knex cung cấp cho tôi một cách tương tác với cơ sở dữ liệu của chúng tôi, giống như JavaScript, nhưng chúng tôi vẫn được yêu cầu phải suy nghĩ theo cách tập trung vào cơ sở dữ liệu khi chúng tôi cần thao tác dữ liệu

Ba thư viện tiếp theo mà chúng tôi sẽ nói đến đều được xây dựng trên đỉnh Knex (được xây dựng trên đỉnh của PG hoặc MySQL) và là những ví dụ về các thư viện Lập bản đồ đối tượng của các đối tượng hoặc các thư viện . Như tên gọi, mục đích của thư viện ORM là sự giao dịch giữa dữ liệu trong hệ thống cơ sở dữ liệu và các đối tượng JavaScript trong ứng dụng của bạn. Điều đó có nghĩa là, thay vì nghĩ về các bản ghi trong bảng người dùng khi bạn viết mã JavaScript của mình, bạn có thể nghĩ về các đối tượng người dùng. bảng người dùng khi bạn viết mã JavaScript, bạn có thể nghĩ về đối tượng người dùng

Sự phản đối

Thư viện đầu tiên mà chúng tôi sẽ xem xét đánh giá là sự phản đối, được xây dựng trên đỉnh Knex

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
77
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
88
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
79

Để làm nổi bật một số tiện ích của các thư viện ORM, chúng tôi sẽ thay đổi ứng dụng của mình để hiển thị cho người dùng và nhận xét của họ. Sự phản hồi đối tượng được xây dựng trên đầu của Knex, vì vậy trong chỉ mục tệp. js của tôi, chúng tôi phải chặn Knex tại chỗ và thêm một chút mã (tôi sẽ đặt mọi thứ vào chỉ mục tệp. js, to keep for every thứ đơn giản. Trong một ứng dụng thực tế, bạn sẽ chia mã thành các tệp riêng biệt)

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
60
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
61

Điều này cung cấp cho chúng tôi một mô hình lớp mà từ đó chúng tôi có thể kế thừa để xác định người dùng hai lớp và nhận xét. Chúng tôi sẽ xác minh bình luận trước

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
8

Class of them me to expand

_______ 762 và phải thực thi hàm _______ 763 để biết sự phản hồi của đối tượng bảng cơ sở dữ liệu nào chứa các bản ghi cơ bản

Class

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
64 là tương tự, nhưng chúng tôi sẽ thêm một số hành vi vào lớp của chúng tôi; . Chúng tôi cũng sẽ phản bác rằng ____766 có
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
67 (tức là người dùng sở hữu số không hoặc nhiều nhận xét). Trong ORM -speak, điều này thường được mô tả là "có nhiều mối quan hệ" - tức là người dùng có nhiều nhận xét. This is code for this thing look as any

JavaScript

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
30

Class of them me to expand

_______ 762 và phải thực thi hàm _______ 763 để biết sự phản hồi của đối tượng bảng cơ sở dữ liệu nào chứa các bản ghi cơ bản

Class

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
64 là tương tự, nhưng chúng tôi sẽ thêm một số hành vi vào lớp của chúng tôi; . Chúng tôi cũng sẽ phản bác rằng ____766 có
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
67 (tức là người dùng sở hữu số không hoặc nhiều nhận xét). Trong ORM -speak, điều này thường được mô tả là "có nhiều mối quan hệ" - tức là người dùng có nhiều nhận xét. This is code for this thing look as any

JavaScript

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
31

Class of them me to expand

_______ 762 và phải thực thi hàm _______ 763 để biết sự phản hồi của đối tượng bảng cơ sở dữ liệu nào chứa các bản ghi cơ bản

Class

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
64 là tương tự, nhưng chúng tôi sẽ thêm một số hành vi vào lớp của chúng tôi; . Chúng tôi cũng sẽ phản bác rằng ____766 có
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
67 (tức là người dùng sở hữu số không hoặc nhiều nhận xét). Trong ORM -speak, điều này thường được mô tả là "có nhiều mối quan hệ" - tức là người dùng có nhiều nhận xét. This is code for this thing look as any.
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
32

Chúng tôi xác định một đối tượng

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
68 bên trong lớp
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
64 của chúng tôi, với một từ khóa nhận xét duy nhất và giá trị phản đối rằng đây là ____770 trên lớp
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
71, trong đó giá trị của cột ID của bảng người dùng phù hợp với giá trị của cột user_id của cột user_id .
https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
49
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
74
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
81

Bây giờ chúng tôi đã xác định các lớp học của chúng tôi, hãy sử dụng chúng trong mã của chúng tôi. Tại đây, sự phát triển mới của

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
73

Ở đây, chúng tôi tìm tải 5 người dùng, sau đó cho từng người dùng đó, chúng tôi tìm tải nhận xét của họ và gán những người đó vào thuộc tính nhận xét của đối tượng người dùng của chúng tôi. In view/trang/index mode. ejs, tôi có thể hiển thị người dùng và nhận xét của họ như sau

HTML

Bạn có thể tìm thấy mã với những thay đổi này ở đây. Như thường lệ, cam kết và kết thúc quá trình phát triển

JavaScript

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
33

Class of them me to expand

_______ 762 và phải thực thi hàm _______ 763 để biết sự phản hồi của đối tượng bảng cơ sở dữ liệu nào chứa các bản ghi cơ bản

Class

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
64 là tương tự, nhưng chúng tôi sẽ thêm một số hành vi vào lớp của chúng tôi; . Chúng tôi cũng sẽ phản bác rằng ____766 có
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
67 (tức là người dùng sở hữu số không hoặc nhiều nhận xét). Trong ORM -speak, điều này thường được mô tả là "có nhiều mối quan hệ" - tức là người dùng có nhiều nhận xét. This is code for this thing look as any

Chúng tôi xác định một đối tượng

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
68 bên trong lớp
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
64 của chúng tôi, với một từ khóa nhận xét duy nhất và giá trị phản đối rằng đây là ____770 trên lớp
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
71, trong đó giá trị của cột ID của bảng người dùng phù hợp với giá trị của cột user_id của cột user_id

Bây giờ chúng tôi đã xác định các lớp học của chúng tôi, hãy sử dụng chúng trong mã của chúng tôi. Tại đây, sự phát triển mới của

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
73.
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
76

Ở đây, chúng tôi tìm tải 5 người dùng, sau đó cho từng người dùng đó, chúng tôi tìm tải nhận xét của họ và gán những người đó vào thuộc tính nhận xét của đối tượng người dùng của chúng tôi. In view/trang/index mode. ejs, tôi có thể hiển thị người dùng và nhận xét của họ như sau

HTML

Bạn có thể tìm thấy mã với những thay đổi này ở đây. Như thường lệ, cam kết và kết thúc quá trình phát triển

Bây giờ, khi tải lại trang, bạn sẽ thấy người dùng và nhận xét

"N+1 lựa chọn vấn đề"

Mã này nêu bật một vấn đề phổ biến mà mọi người gặp phải khi sử dụng các thư viện ORM, được gọi là vấn đề của N+1 lựa chọn

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
77
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
78
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
79
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
90

Đây là khối mã mà chúng tôi đã sử dụng để tìm tải người dùng và nhận xét của họ

JavaScript

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
34

Class of them me to expand

_______ 762 và phải thực thi hàm _______ 763 để biết sự phản hồi của đối tượng bảng cơ sở dữ liệu nào chứa các bản ghi cơ bản

JavaScript

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
35

Class of them me to expand

_______ 762 và phải thực thi hàm _______ 763 để biết sự phản hồi của đối tượng bảng cơ sở dữ liệu nào chứa các bản ghi cơ bản

Class

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
64 là tương tự, nhưng chúng tôi sẽ thêm một số hành vi vào lớp của chúng tôi; . Chúng tôi cũng sẽ phản bác rằng ____766 có
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
67 (tức là người dùng sở hữu số không hoặc nhiều nhận xét). Trong ORM -speak, điều này thường được mô tả là "có nhiều mối quan hệ" - tức là người dùng có nhiều nhận xét. This is code for this thing look as any

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
36

Chúng tôi xác định một đối tượng

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
68 bên trong lớp
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
64 của chúng tôi, với một từ khóa nhận xét duy nhất và giá trị phản đối rằng đây là ____770 trên lớp
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
71, trong đó giá trị của cột ID của bảng người dùng phù hợp với giá trị của cột user_id của cột user_id

JavaScript

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
37

Class of them me to expand

_______ 762 và phải thực thi hàm _______ 763 để biết sự phản hồi của đối tượng bảng cơ sở dữ liệu nào chứa các bản ghi cơ bản

Code in view/trang/index mode. ejs near as same same (Tôi đã xóa hàm fullName khỏi lớp người dùng)

HTML

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
38

Bạn có thể tìm thấy mã với những thay đổi này ở đây. Và tất nhiên, một lần nữa cam kết và khai thác

https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
49
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
93____881

Next section

Thư viện cuối cùng mà chúng tôi sẽ xem xét là phần tiếp theo

Phần tiếp theo khá quan trọng theo cách nó mong đợi dữ liệu của bạn được cấu trúc. Nếu bạn tuân theo các quy ước của nó, bạn có thể viết ít mã hơn và cho phép phần tiếp theo thực hiện nhiều công việc cho bạn. Cụ thể, phần tiếp theo có rất nhiều tính năng để giúp tạo các bảng cho bạn và theo mặc định, nó sẽ tạo ra chúng theo cấu trúc của riêng nó và các quy định đặt tên

Cơ sở dữ liệu mà chúng tôi đã sử dụng được cấu trúc là chính xác theo cách tiếp theo, vì vậy chúng tôi cần thêm một chút cấu hình bổ sung để cho phép phần tiếp theo hoạt động với nó

Installing section next

Để xóa giá sách và cài đặt phần tiếp theo, hãy chạy các lệnh sau

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
95
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
96
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
88
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
98

Use the next section

Trọng chỉ số. js, replace the after lines

JavaScript

 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
39

… With this thing

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
0

… With this thing

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
1

… With this thing

Sau đó, thay thế các lớp định nghĩa cho người dùng và nhận xét bằng mã này

Lưu ý rằng chúng tôi đã chuyển hai đối tượng cho

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
99. Đối tượng đầu tiên xác định các thuộc tính của đối tượng của tôi và thứ hai chứa một số siêu dữ liệu

Trong trường hợp này, chúng tôi đã nói với phần tiếp theo rằng cơ sở dữ liệu củng cố lớp người dùng được gọi là 'người dùng' (theo mặc định, phần tiếp theo sẽ suy nghĩ rằng bảng được gọi là 'người dùng'

Phần tiếp theo giúp bạn rất dễ dàng ghi mã sẽ tạo các bảng cho bạn và khi nó làm như vậy, nó sẽ thêm các cột dấu thời gian này và đặt các giá trị của chúng phù hợp khi bạn ghi vào cơ sở dữ liệu. Các tài liệu tiếp theo là tuyệt vời, và có nhiều hơn về điều này

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
2

… With this thing

JavaScript

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
3

… With this thing

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
83

Sau đó, thay thế các lớp định nghĩa cho người dùng và nhận xét bằng mã này

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
84

Lưu ý rằng chúng tôi đã chuyển hai đối tượng cho

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
99. Đối tượng đầu tiên xác định các thuộc tính của đối tượng của tôi và thứ hai chứa một số siêu dữ liệu.
https://anonystick.com?id=1234&search=query%20string%20parameters%20in%20JavaScript&token=123412341341
49
const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
86
 /* Morris.js Charts */
  // Sales chart
  var area = new Morris.Area({
    element: 'revenue-chart',
    resize: true,
    data: [
      {y: '2016 Q1', item1: 5000, item2: 4460},
      {y: '2016 Q2', item1: 8432, item2: 5713}
    ],
    xkey: 'y',
    ykeys: ['item1', 'item2'],
    labels: ['Item 1', 'Item 2'],
    lineColors: ['#a0d0e0', '#3c8dbc'],
    hideHover: 'auto'
  });
  var line = new Morris.Line({
    element: 'line-chart',
    resize: true,
    data: [
      {y: '2015 Q4', item1: 0},
      {y: '2016 Q1', item1: 5000},
      {y: '2016 Q2', item1: 8432}
    ],
    xkey: 'y',
    ykeys: ['item1'],
    labels: ['Item 1'],
    lineColors: ['#efefef'],
    lineWidth: 2,
    hideHover: 'auto',
    gridTextColor: "#fff",
    gridStrokeWidth: 0.4,
    pointSize: 4,
    pointStrokeColors: ["#efefef"],
    gridLineColor: "#efefef",
    gridTextFamily: "Open Sans",
    gridTextSize: 10
  });
81

Trong trường hợp này, chúng tôi đã nói với phần tiếp theo rằng cơ sở dữ liệu củng cố lớp người dùng được gọi là 'người dùng' (theo mặc định, phần tiếp theo sẽ suy nghĩ rằng bảng được gọi là 'người dùng'

Phần tiếp theo giúp bạn rất dễ dàng ghi mã sẽ tạo các bảng cho bạn và khi nó làm như vậy, nó sẽ thêm các cột dấu thời gian này và đặt các giá trị của chúng phù hợp khi bạn ghi vào cơ sở dữ liệu. Các tài liệu tiếp theo là tuyệt vời, và có nhiều hơn về điều này

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
81 mà chúng tôi chuyển đến Hasmany là một trong những nơi mà chúng tôi phải nói phần tiếp theo Chúng tôi không tuân theo các quy ước của nó. Nó mong đợi (và sẽ tạo cho chúng tôi) một cột có tên UserID để liên kết nhận xét với người dùng

Party in function

const { Pool } = require('pg');const conn = new Pool({ connectionString: process.env.DATABASE_URL });
73 của chúng tôi, chúng tôi có thể thay thế tất cả các mã này

… With this line duy nhất

Chúng tôi cũng phải thực hiện một thay đổi nhỏ trong chế độ xem/trang/index. ejs. Replace this line

  • With this thing (sự khác biệt là người dùng. com instead of user. com)
  • Bạn có thể tìm thấy mã với những thay đổi này ở đây
  • Một vấn đề liên quan đến tuổi của thư viện. Nếu nó đã tồn tại trong một khoảng thời gian, thì nhiều khả năng các vấn đề phổ biến đã được tìm thấy và giải quyết. Nếu nó là một thư viện tương đối mới, bạn có thể phải tìm kiếm nhiều thứ hơn cho chính mình (đó có thể là một điều tốt nếu bạn là người thích chơi với đồ chơi mới, sáng bóng và giải các câu đố)
  • Hiệu suất có nhiều khả năng phụ thuộc vào cách bạn sử dụng thư viện hơn là trên chính thư viện. Tuy nhiên, nếu bạn hoàn toàn, tích cực phải ép vài micro giây cuối cùng ra khỏi ứng dụng của bạn, sau đó làm việc gần hơn với cơ sở dữ liệu bằng SQL hoặc KNEX sẽ nhanh hơn một chút. Được cảnh báo rằng đây thường là một lợi ích gần biên giới và chi phí cho khả năng duy trì mã của bạn rất có thể cao hơn mức tăng trong hiệu suất điểm chuẩn

Hanh phúc truy vấn

Chúng ta có thể chạy truy vấn SQL trong JavaScript không?

Trường hợp sử dụng điển hình để thực thi SQL từ JavaScript là cập nhật trạng thái thực thi vào thời gian chạy trong tuần hoàn hoặc để lưu các bản ghi bị từ chối do xác thực vào bảng lỗi. Ví dụ dưới đây cho thấy cách thực thi SQL từ JavaScript

Bạn có thể viết SQL bằng HTML không?

Bạn có thể xuất HTML từ SQL vì SQL Server có hỗ trợ tích hợp để xuất XML và HTML được hiểu rõ nhất là một phương thức ngôn ngữ hơi lạ của XML truyền đạt ý nghĩa cho các thẻ đã được xác định trước đó. Có rất nhiều trường hợp bên cạnh đó cấu trúc HTML là cách rõ ràng nhất để truyền đạt các bảng, danh sách và thư mục. vì SQL Server có hỗ trợ tích hợp sẵn để xuất XML và HTML được hiểu tốt nhất là một phương ngữ hơi kỳ lạ của XML truyền đạt ý nghĩa cho các thẻ được xác định trước. Có rất nhiều trường hợp cạnh trong đó cấu trúc HTML là cách rõ ràng nhất để giao tiếp các bảng, danh sách và thư mục.

SQL hay JavaScript cái nào tốt nhất?

JavaScript là một ngôn ngữ lập trình đầy đủ mà sau đó được tận dụng để giúp bạn viết mã phía máy chủ. SQL, là nơi bạn học cách làm việc với cơ sở dữ liệu. Thực tế đây là một loại kiến ​​thức về back-end