Lưu trữ chức năng JavaScript trong cơ sở dữ liệu

Giả sử tôi có một doanh nghiệp đại diện cho những người dùng dành một khoảng thời gian nhất định để sản xuất một lượng nội dung nhất định. Tôi muốn mỗi người dùng được tự do tạo thuật toán hoặc công thức của riêng họ để xác định mức giá mà họ tính cho công việc của mình.

Bộ sưu tập người dùng, có thể có hàng nghìn người dùng khác nhau. Tôi đang sử dụng MongoDB.


Mã.

    {
      userId: 'sdf23d23dwew',
      price: function[time, qty]{
        // some algorithm
      }
    },
    {
      userId: '23f5gf34f',
      price: function[time, qty]{
        // another algorithm
      }
    },
    {
      userId: '7u76565',
      price: function[time, qty]{
        // yet another algorithm
      }
    },
    {
      userId: 'w45y65yh4',
      price: function[time, qty]{
        // something else
      }
    }

    //and on and on and on...

Now, JSON doesn't support functions and neither does MongoDB. BUT this use-case of possibly thousands of users, each with the freedom to create their own unique method of determining their own prices, seems to me like being able to store functions inside of their user document would be ideal.

I certainly don't feel like it's a good idea to just store all these thousands of functions in a JS file on the server that somehow gets referenced by a userId when it's needed...

Is there a solution for this case?

 

KHÔNG ĐƯỢC LÀM VẬY.

Nghiêm túc đấy, đừng làm thế này.

Đó là một ý tưởng tồi vì một vài lý do.

Trước hết, bạn đang phơi mình trước mọi kiểu tấn công khó chịu. Nếu mã chạy phía máy chủ, bạn sẽ tiết lộ tất cả dữ liệu và thông tin người dùng của mình ra thế giới bên ngoài [bao gồm cả những thứ như mật khẩu. ]. Nếu mã chạy phía máy khách, bạn chỉ còn một bước nữa là đến một liên kết độc hại hoàn toàn hút người dùng của bạn.

Vì vậy, từ quan điểm bảo mật, đây thực sự là một ý tưởng tồi.

Nhưng từ quan điểm khả năng sử dụng, đây cũng là một ý tưởng tồi. Mong đợi người dùng của bạn viết chức năng cho trang web của bạn có nghĩa là bạn đang mong đợi người dùng của mình biết cách viết mã. Hơn nữa, bạn đang mong đợi họ viết nó tốt. Nếu bạn quyết định trừu tượng hóa phần viết mã, thì tại sao phải lưu trữ mã chứ không chỉ phần trừu tượng? . Ngoài ra, hãy sẵn sàng hỗ trợ bất kỳ API nào bạn giới thiệu cho người dùng của mình trong thời gian dài tiếp theo. Bất kỳ phần chức năng nào bạn tiết lộ cho họ, dù là cố ý hay vô tình, sẽ được sử dụng và khiếu nại nếu nó biến mất.

Tại nơi làm việc của mình, tôi duy trì một ứng dụng cung cấp cho người dùng nội bộ đáng tin cậy khả năng thực thi các tập lệnh Groovy tùy ý tại các điểm khác nhau của quy trình. Sai lầm lớn nhất mà chúng tôi mắc phải là chúng tôi đã không hoàn toàn sandbox các kịch bản thú vị. Chúng tôi đã tiết lộ mô hình đối tượng rất sâu của mình cho những người viết kịch bản và hiện tại chúng tôi có một API được thiết kế khá kém, thực sự khó phát triển vì chức năng được lưu trữ của chúng tôi có thể bị hỏng. Quá trình tái cấu trúc khó hơn gấp 100 lần vì chúng tôi cũng phải truy vấn cơ sở dữ liệu để hy vọng tìm ra cái gì đang sử dụng cái gì [Và chúng tôi vẫn bỏ lỡ nó trong nhiều trường hợp, điều này gây ra thời gian chết cho sản phẩm của chúng tôi. ]

TL;DR ĐỪNG LÀM ĐIỀU NÀY. Dữ liệu đi vào cơ sở dữ liệu, không phải chức năng.

 

Bất cứ khi nào chúng tôi sử dụng Javascript để lập trình, một trong những điều đầu tiên mà chúng tôi muốn đạt được là một số loại "kiên trì". Một cách mà chúng tôi có thể sử dụng để lưu thông tin mà chúng tôi có và truy cập thông tin đó sau này. Chúng ta hãy tìm hiểu cách thực hiện việc này, vì có một số cách mà chúng ta có thể sử dụng để lưu trữ thông tin trong hệ thống của mình. Để làm điều này, chúng tôi sẽ sử dụng nút. js​ , vì vậy nếu bạn chưa cài đặt nút trong hệ thống của mình, hãy sẵn sàng tải xuống gói / tệp cài đặt mới nhất của họ từ trang web chính thức của họ trước khi bạn bắt đầu viết mã


Lưu ý cho nhà phát triển

Phạm vi của hướng dẫn này sẽ cố gắng sử dụng các mô hình hướng đối tượng bất cứ khi nào có thể. Hướng dẫn này sẽ không tập trung vào việc sử dụng phản ứng hoặc góc cạnh để gọi bất kỳ điểm cuối chứa đầy dữ liệu nào. Nó được định hướng nhiều hơn vào việc sử dụng javascript trong máy chủ phụ trợ của bạn


Tôi muốn rất rõ ràng về điều này. Nếu bạn đã từng sử dụng hướng dẫn này trong ứng dụng khách phía trước, bạn sẽ làm sai. Hướng dẫn này chỉ dành cho lập trình back-end trong Javascript. Chúng tôi sẽ giới thiệu cách sử dụng chính xác hướng dẫn này để tương tác với khung giao diện người dùng của bạn. Bây giờ, chờ đã, tôi không nói rằng việc truy cập cơ sở dữ liệu từ giao diện người dùng của bạn luôn là một ý tưởng tồi. Có nhiều cách để bạn có thể làm điều đó và google cung cấp các dịch vụ phần mềm tốt như firebase cho phép bạn tương tác an toàn với dữ liệu cũng như các ứng dụng khách đã xác định và đăng ký trong mạng của bạn. Điều duy nhất tôi muốn làm rõ là đây không phải là một trong số đó. ​


Chúng tôi sẽ sử dụng express js và node js để tạo một điểm cuối web nhỏ mà từ đó chúng tôi sẽ làm việc. Tôi luôn thích lập trình như thế này, vì nó giúp tôi có một cái nhìn rõ ràng rằng vào cuối ngày, chúng tôi đang tạo ra một điểm cuối theo mô-đun và độc lập

EXPRESS TO WORK AS A WEB ENDPOINT

Chúng tôi sẽ sử dụng express trong dự án nhỏ của chúng tôi. Điều hướng đến bất kỳ thư mục nào bạn sẽ làm việc và nhập npm init  , sau khi trả lời tất cả các câu hỏi, hãy thực thi npm install express. Đừng sao chép tệp này, chúng tôi sẽ sử dụng một tệp khác trong phần hướng dẫn

Phần code này sẽ chịu trách nhiệm lắng nghe các kiến ​​nghị của client. Ngay bây giờ chúng tôi chỉ đơn giản là sử dụng express. js để xử lý các yêu cầu và nó vẫn chưa hoàn thành [đợi trước khi bạn sao chép]. Nếu bạn chưa từng sử dụng express trước đây, thì express là một khung javascript nhỏ tạo ra một máy chủ web nhỏ. Sử dụng rất đơn giản [dòng 2 & 3 để tải nó] từ một đối tượng đơn giản xử lý hầu hết mọi thứ. Tôi thích nó, tôi thấy nó là một trong những framework tốt nhất tôi từng sử dụng trong javascript vì nó đơn giản, dễ sử dụng và rất trực quan. Nó rất hữu ích cho các dự án nhỏ mà bạn không cần phải thiết kế quá mức hệ thống định tuyến hoặc bất kỳ mô-đun định tuyến nâng cao nào


Express cho phép chúng tôi tạo các điểm cuối mà chúng tôi sẽ truy cập qua http. //máy chủ cục bộ [hoặc ip hoặc máy hoặc bất cứ thứ gì bạn có]/tên tuyến đường. ​Bây giờ hãy sao chép phần sau vào trình điều khiển. js. Chúng tôi sẽ sử dụng tệp này sau một phút

Bây giờ nếu bạn không thấy bức tranh toàn cảnh hơn về cách thức hoạt động của nó, có thể ra ngoài đi dạo, thư giãn và thư giãn. Về cơ bản, đây là bộ xương chúng ta sẽ sử dụng để làm việc. Chúng tôi sẽ làm việc độc lập với từng chức năng


Về đối tượng kết nối

trong ví dụ này. chúng tôi cho rằng máy chủ sẽ liên tục nhận các yêu cầu trực tuyến, vì vậy chúng tôi tạo một đối tượng lừa đảo trong hàm tạo của lớp Trình điều khiển, sau đó sử dụng lại nó nhiều lần, thay vì tạo một đối tượng lừa đảo mỗi lần. Nếu kết nối bị hỏng tại một thời điểm nào đó, thì chúng tôi sẽ cần phải thiết lập lại kết nối, nhưng đây chỉ là thử nghiệm nên chúng tôi sẽ không đề cập đến vấn đề đó trong hướng dẫn này

[OPTIONAL] USING NODEMON TO REFRESH NODE EVERY TIME

Chạy ứng dụng nút. js bằng tay mỗi khi chúng ta thực hiện thay đổi đối với mã của mình sẽ hơi tẻ nhạt và khó chịu, vì vậy hãy tự động hóa việc đó. Phần này không cần thiết phải làm theo cùng với phần còn lại của hướng dẫn, nhưng chắc chắn sẽ giúp bạn tiết kiệm một số thao tác gõ phím


Hãy bắt đầu bằng cách cài đặt gói gật đầu. Đây là công cụ tự động khởi động lại ứng dụng Node khi phát hiện thay đổi tệp trong thư mục

npm cài đặt --save-dev gật đầu


Bây giờ hãy chạy ./node_modules/.bin/nodemon driver.js và thay đổi thành driver.js. gật đầu sẽ phát hiện thay đổi và khởi động lại ứng dụng

Using SQL to STORE DATA FROM A JS OBJECT

Là một lập trình viên, bạn sẽ muốn sử dụng MYSQL và/hoặc các hệ thống SQL khác để lưu dữ liệu đúng cách. Những gì Mysql làm là mở một trình kết nối mà bạn có thể sử dụng để thực thi các lệnh SQL


Trước tiên, nếu chúng ta định sử dụng MYSQL, chúng ta sẽ cần tải xuống và cài đặt thư viện trong nút của mình. Trong thiết bị đầu cuối của chúng tôi, chỉ cần điều hướng đến bất cứ nơi nào bạn sẽ làm việc và thực hiện lệnh "npm install mysql", lệnh này sẽ cài đặt mysql trong thư mục dự án của bạn


Có nhiều cách bạn có thể sử dụng để thiết lập môi trường SQL để kiểm tra và làm việc. Nếu bạn chưa cài đặt máy chủ SQL hoặc điểm cuối để làm việc, hãy xem hướng dẫn của chúng tôi về cách chạy PHP, SQL và APACHE trong máy tính của bạn bằng Docker


Không cảm thấy tốt hay xấu. SQL là một ngôn ngữ đánh dấu rất phổ biến và rộng rãi, cho phép xây dựng nhiều thứ, vì vậy đây là một thiết lập mà bạn thực sự có thể sử dụng tại một số thời điểm trong quá trình phát triển. Hãy tạo hai tệp. mục lục. js sẽ xử lý dịch vụ điểm cuối và cách xử lý các lệnh gọi của khách hàng. Người lái xe. js, mặt khác, sẽ hoạt động như một loại "phần mềm trung gian" giữa điểm cuối và cơ sở dữ liệu của chúng tôi. Sự khác biệt nhỏ này sẽ giúp chúng tôi giữ mã gọn gàng và có tổ chức


Hãy đi và kiểm tra kết nối đầu tiên của chúng ta, hãy xem kết nối này trông như thế nào

Một trong những lý do tại sao tôi không thích sử dụng mysql là sự trộn lẫn ' và " ở khắp mọi nơi trong dòng 3. Nó cũng mở ra khả năng khai thác và hack sql injection.  


Ngoài ra, hãy tính đến việc chúng tôi trả về kết quả dựa trên phản hồi của cơ sở dữ liệu sql là gì. Nếu có thay đổi trong cơ sở dữ liệu, chúng tôi sẽ không được thông báo hoặc thông báo, lỗi sẽ qua. cùng với cấp độ tiếp theo [chẳng hạn như giao diện người dùng].  


Dữ liệu được trả về từ cơ sở dữ liệu MySQL có thể được phân tích cú pháp đơn giản bằng cách lặp qua đối tượng rows.  

Về chức năng lambda

Nếu bạn không quen thuộc với các hàm lambda thì đây là một mẹo nhỏ. {row} là đối tượng được phân giải từ mã bên trong hàm lambda. Bạn có thể gọi nó là hàng hoặc bất kỳ cách nào bạn muốn, miễn là chúng trùng nhau trước và sau =>. Đối tượng thực sự phân giải thành {row} là mục từ mảng đang lặp lại trong [foreach] và bạn có thể gọi nó theo bất kỳ cách nào bạn muốn

UPDATING data

nếu bạn chưa sử dụng gật đầu, hãy thực thi trình điều khiển nút. js và kiểm tra kết quả. Bạn có thể mân mê nó cho đến khi bạn hiểu mã đang làm gì. Tôi muốn bạn kiểm tra một điều nhỏ mà tôi đã làm để bạn tóm tắt lại. Nếu bạn kiểm tra bảng điều khiển. tệp nhật ký. Tôi đang in kết quả mà tôi đã chèn thay vì kết quả mà hệ thống cung cấp cho tôi. Tôi đang sử dụng đối tượng "máy khách" để đảm nhiệm việc in kết quả thay vì thông tin từ đối tượng kết quả được trả về. Tại sao bạn nghĩ rằng tôi đang làm điều này?


Việc tiếp theo chúng ta sẽ làm là cập nhật dữ liệu và thông tin. Nếu bạn kiểm tra truy vấn này, bạn có thể dễ dàng kiểm tra xem có bao nhiêu hàng đã bị ảnh hưởng bởi truy vấn cập nhật

Hãy bắt đầu mã và tạo một chức năng mới để cập nhật ứng dụng khách trong tập lệnh trình điều khiển của chúng tôi

Chúng tôi cũng sẽ cập nhật những dòng mã cuối cùng để tập lệnh của chúng tôi sẽ phản ánh tất cả những thay đổi này và chúng tôi có thể giải thích điều gì đang diễn ra

Wait a minute, something is wrong.. .

Kiểm tra lại. Khi bạn cập nhật tên máy khách, kết quả sẽ thay đổi đối tượng máy khách và nó sẽ thay đổi tất cả các kết quả. Làm thế nào điều này có thể xảy ra?


Lỗi này xuất phát từ cách Javascript hoạt động và cách Javascript tương tác với các biến trong chính tập lệnh này. Và hiểu những gì đang diễn ra sẽ có nghĩa là bạn biết javascript hoạt động như thế nào và tại sao nó bị lỗi


TIỀN BOA. khái niệm chính đằng sau javascript là bản thân mã có nghĩa là không đồng bộ. Cố gắng tìm hiểu tại sao điều này xảy ra trước khi đọc câu trả lời


AND THE ANSWER IS WRONG

Chúng tôi đã giả định rằng mã trong Javascript thường thực thi theo cách đồng bộ có lập trình trong khi sự thật thì không phải vậy. Javascript bên trong hoạt động với những lời hứa với các chức năng của chúng. Khi bạn gọi bộ điều khiển storeclient, bạn sẽ không thực thi mã cho đến khi truy vấn kết thúc. Điều này có nghĩa là mã javascript vẫn phải tìm nạp thông tin từ máy chủ cơ sở dữ liệu và cho đến khi nó đến được, thay vì tạm dừng mã, nó sẽ trả về một "lời hứa", nghĩa là khi mã javascript đã kết nối thành công với trình điều khiển mysql . Điều này liên quan đến callback_functions và đó là cách thức hoạt động cơ bản của javascript


Mặc dù có thể không giống như vậy, nhưng ứng dụng khách tuyên bố. name = "Paul" thực sự đang xảy ra trước khi cơ sở dữ liệu bị thay đổi và do chúng tôi không kiểm soát đầu ra trong bảng điều khiển của mình. log, bảng điều khiển đang in ra tên mà chúng tôi đã thay đổi


Chúng tôi không có ánh xạ chính xác giữa các biến mặt trước và các phiên bản của chúng trong mặt sau của chúng tôi. Đây là một sai lầm rất phổ biến của tân binh và tôi đã thấy lặp đi lặp lại nhiều lần trong hồ sơ cấp dưới


Nếu chúng ta sử dụng một đối tượng để đóng gói tất cả các hành động mà bạn có thể thực hiện với nó, thì chúng ta phải luôn đồng bộ hóa thông tin. Hãy kiểm tra việc thực hiện này


Bây giờ, một vài điều đã thay đổi ở đây. Trước hết, chúng tôi đã ủy quyền việc tạo mục cho chính Khách hàng và hiện tại không có trình điều khiển nào. Hiện Khách hàng là người điều khiển. Nó hoạt động như một trình điều khiển cho chính nó và trích xuất và chăm sóc dữ liệu của chính nó. Nếu chúng ta tạo một đối tượng dữ liệu bằng cách sử dụng biểu diễn này, thì chúng ta phải tính đến toàn bộ việc xem xét hướng đối tượng này


Nhược điểm của tình huống này là chúng tôi đang tạo nhiều phiên bản kết nối cho mỗi đối tượng máy khách, Chúng phải được đóng riêng


Lưu ý rằng trong thiết kế này, tôi phải thêm khách hàng trước khi cam kết. Đây chỉ là một ví dụ để bạn có một ví dụ về tương tác cơ sở dữ liệu. Trong các tình huống bình thường, cam kết và thêm phải giống nhau. Tuy nhiên, trong trường hợp này, điều tôi muốn chỉ cho bạn là các thao tác CRUD khác nhau [tạo, đọc, cập nhật, xóa] mà bạn có thể thực hiện.  


Ngoài ra, hãy kiểm tra thời gian chờ đã đặt mà chúng tôi đã sử dụng để xây dựng giải pháp này. Đây chỉ là một điều tạm thời để loại bỏ vấn đề mã đồng bộ và không đồng bộ. Trên cơ sở hàng ngày, những hành động này sẽ được thực hiện riêng biệt nên chúng chỉ ở đây cho mục đích thử nghiệm [nếu chúng ta không đợi, thì đối tượng không "làm mới" đúng cách, vì vậy chúng ta phải đợi nó]


Ý tưởng đằng sau hệ thống này là bao gồm Mysql bên trong cấu trúc hướng đối tượng trong khung javascript. Thực thi mã thông qua trình điều khiển nút. js  và thao tác với quá trình đồng bộ hóa. Bạn có thể thấy những gì xảy ra?


Bài tập về nhà cho các bạn nếu bạn muốn. ¿Bạn có thể tạo phương thức xóa không?

Sử dụng MongoDB

MongoDB là một cơ sở dữ liệu hướng đối tượng khác mà chúng ta có thể sử dụng trong Javascript. Nếu bạn có ít hoặc không có kinh nghiệm với MongoDB thì tôi khuyên bạn nên google một chút về cách thức hoạt động của MongoDB trước khi quay lại đây.  


Một cái mà tôi ngày càng thích hơn mỗi ngày. Để sử dụng mongodb, chúng tôi có hai khả năng khác nhau


Nếu chúng ta đã thiết lập docker, chúng ta có thể thiết lập hình ảnh docker mongo bằng cách sử dụng lệnh

docker run --name some-mongo -d mongo:latest

Đây là một lệnh nhỏ sẽ kéo hình ảnh mongo và khởi động nó trong máy docker của chúng tôi mà chúng tôi có thể truy cập vào. Lưu ý, dữ liệu chúng tôi sử dụng trong hình ảnh này sẽ không cố định


​Bạn cũng có thể cài đặt mongodb trong máy của mình từ trang tải xuống của họ và khởi động máy chủ cục bộ của riêng bạn


Là tài nguyên cuối cùng, bạn có thể sử dụng cơ sở dữ liệu miễn phí mà mongo cung cấp cho người dùng với dịch vụ Mongo Cloud Atlas của họ [đây là những gì tôi sẽ làm cho hướng dẫn này]. Tôi khuyên bạn cũng nên kiểm tra điều này để bạn quen với các dịch vụ cơ sở dữ liệu phần mềm web và ưu điểm của chúng. Để bắt đầu, chỉ cần đăng nhập hoặc đăng ký trang web của họ và tạo một cụm khởi động mới

Làm theo hướng dẫn của họ trong cấu hình phù hợp với nhu cầu của bạn. Về Người dùng, chúng tôi cũng sẽ cần tạo một người dùng có quyền truy cập vào cụm này

Cuối cùng, chúng tôi sẽ cần thiết lập các tham số bảo mật, nhấp vào "kết nối" trong bảng điều khiển của bạn và làm theo hướng dẫn trên màn hình. Đảm bảo rằng bạn đưa ip của mình vào danh sách trắng để bạn có quyền truy cập vào cụm của mình. Hãy nhớ rằng thông thường ISP của bạn thay đổi IP, vì vậy bạn sẽ phải thay đổi điều này. Bạn có thể tắt tính năng này nếu muốn và nếu bạn chỉ muốn kiểm tra và học hỏi

Khi bạn đến tab kết nối, chỉ cần tắt nó đi [chúng tôi đã kết nối với cụm thông qua javascript của riêng chúng tôi]. Bạn cũng có thể kết nối với nó bằng Mongo Compass. Nếu bạn chưa gặp Mongo Compass, Mongo Compass cho phép bạn kết nối và khám phá cơ sở dữ liệu mongo. Đây là một công cụ rất tiện lợi mà tôi khuyên bạn nên xem qua nếu bạn chưa từng làm như vậy trước đây


Tiếp theo, hãy cài đặt thư viện mongodb bằng cách chạy lệnh sau

npm install mongodb --save

Điều này sẽ cài đặt các mô-đun mongo vào máy của bạn


Nhận thông tin kết nối của cụm của bạn


Bước cuối cùng là chuẩn bị cụm của bạn để kết nối. Trong Atlas, điều hướng đến cụm của bạn và nhấp vào KẾT NỐI


Trình hướng dẫn kết nối cụm sẽ xuất hiện và nhắc bạn đưa địa chỉ IP hiện tại vào danh sách trắng và tạo người dùng MongoDB nếu bạn chưa làm như vậy. Đảm bảo ghi lại tên người dùng và mật khẩu bạn sử dụng cho người dùng MongoDB mới vì bạn sẽ cần chúng ở bước sau


Tiếp theo, Trình hướng dẫn sẽ nhắc bạn chọn phương thức kết nối. Chọn Kết nối ứng dụng của bạn. Khi Trình hướng dẫn nhắc bạn chọn phiên bản trình điều khiển của mình, hãy chọn Nút. js và 3. 0 trở lên.  


Copy the provided connection string in the form of const uri = "mongodb+srv://:@/test?retryWrites=true&w=majority";. That connection string will be the string that we use to connect to our cluster. For more details on how to access the Connection Wizard and complete the steps described above, see the official documentation.


Bước cuối cùng, bây giờ chúng ta cần tạo một cơ sở dữ liệu trong máy chủ của mình. Nếu bạn không biết cách thực hiện việc này, chỉ cần tải xuống và cài đặt Mongo Compass. Nếu bạn sao chép URI của mình và mở chương trình, nó sẽ tự động sao chép tất cả các kết nối dữ liệu và kết nối bạn trong

Bây giờ, chúng ta sẽ thay thế toàn bộ hệ thống cơ sở dữ liệu thành mongo. Kiểm tra phiên bản mới này. Sao lưu trình điều khiển trước đó. js và thay đổi nội dung của nó bằng cái này

Hãy xem nó hoạt động như thế nào bây giờ. Dịch vụ đang cung cấp từ cơ sở dữ liệu. Lưu ý rằng khi chúng ta truy xuất , ID mà chúng ta chuyển là ID mà máy chủ đã được tạo trước đó bởi Dịch vụ DB mongo. Chúng ta phải lấy id này mà máy chủ mongo tạo ra và điền vào đối tượng máy khách của chúng tôi để nó luôn "đồng bộ hóa" với dữ liệu máy chủ.  


Đây là điều quan trọng cần biết bởi vì, giống như trong mysql/mariadb, bất cứ khi nào bạn tạo một đối tượng trong cơ sở dữ liệu, bạn không cần nhập ID vì cả hai hệ thống [sql và mongo] sẽ tự động tạo id này cho bạn


Chúng ta hãy nhìn vào dòng 48

đây. thu thập. updateOne[{id. khách hàng. id}, {'$set'. {'Tên'. khách hàng. tên địa chỉ'. khách hàng. address}}, [err, item]  là cách bạn ghi chú cho các tìm kiếm trong Mongo. Các trường đầu vào của UpdateOne là truy vấn mongo, theo sau là một tập hợp các bản cập nhật được đặt giống như ví dụ


Bây giờ chúng tôi có một trình điều khiển nhỏ tương tác với các bộ sưu tập của chúng tôi trong mongoDB. Chúng tôi đang trích xuất đối tượng Client trong quá trình xuất mô-đun để có thể gọi nó từ bất kỳ mô-đun nào khác mà chúng tôi sử dụng



Creating the webservice

Cho đến bây giờ chúng tôi đã tập trung vào phần kết nối db của hướng dẫn này, tuy nhiên bây giờ chúng tôi cần xem qua phần dịch vụ web. Điều này một lần nữa sẽ khá dễ dàng nhưng có một số điều bạn cần phải ghi nhớ. Để bắt đầu, bây giờ chúng ta sẽ tải chỉ mục. js mà chúng tôi đã tạo trước đây và chúng tôi sẽ sử dụng gật đầu như chúng tôi đã mô tả trước đây để làm việc thoải mái hơn


Để kiểm tra điểm cuối của chúng tôi, chúng tôi sẽ sử dụng Postman. Postman là một công cụ rất hữu ích để kiểm tra các điểm cuối. Bạn cũng có thể sử dụng Curl nếu bạn là người cuồng thiết bị đầu cuối hơn, nhưng hiện tại chúng tôi sẽ sử dụng Postman


Hãy đi đến tài xế của chúng tôi. tập tin js đầu tiên. Chúng tôi cần xóa tất cả các dòng trong tệp mà chúng tôi đã đặt cho đến khi kết thúc định nghĩa lớp và chỉ để lại hai dòng sau


var client = new Client[];

mô-đun. xuất khẩu = khách hàng;


Tệp trình điều khiển, đã sửa sẽ trông như thế này [hãy nhớ thay đổi URI của riêng bạn cho máy chủ mongo của riêng bạn]

Chúng tôi định nghĩa một đối tượng [Máy khách] thông qua một lớp. Sau đó, chúng tôi kích hoạt lớp đó trong một biến và xuất nó qua mô-đun. xuất để bất kỳ mô-đun nào khác nhập nó đều có thể có quyền truy cập vào chức năng do tập lệnh của chúng tôi cung cấp. Chúng ta hãy nhìn vào chỉ số. js bây giờ. [hãy nhớ thực thi npm install express  và sau đó là npm install body-parser] ​

Bây giờ, phần nhập lúc đầu là một phần của trình phân tích cú pháp mà chúng tôi sẽ sử dụng để đọc và ghi dữ liệu json từ các kiến ​​nghị của chúng tôi. Hãy kiểm tra những gì đang xảy ra trong mỗi chức năng mà chúng tôi có.  


/khách hàng/mới

Chúng tôi lấy tên và địa chỉ, khớp thông tin bên trong đối tượng khách hàng và thêm nó vào cơ sở dữ liệu.  


/khách hàng/nhận

Cái này phức tạp hơn một chút vì chúng ta phải đấu tranh một chút để chống lại quan niệm về Javascript và hứa sẽ hiểu đúng những gì đang diễn ra ở đây. Bạn cần chuyển sang phương thức truy xuất bên trong trình điều khiển, nơi hầu hết mọi thứ đang diễn ra

Lưu ý rằng chúng tôi đang đợi ứng dụng khách mongo kết nối bằng cách sử dụng từ khóa chờ đợi dành riêng [do đó tại sao chúng tôi cần đợi, chức năng phải không đồng bộ. Chúng tôi cần mongo để hoàn thành quá trình kết nối trước khi chúng tôi bắt đầu thực hiện công việc. Khi chúng tôi ở trong, chúng tôi cần tìm đối tượng dựa trên id của nó [dòng 11 trong đoạn mã được cắt ở trên]. Nhưng điều này sẽ mất một chút thời gian và chúng tôi không thể mong đợi đối tượng bộ sưu tập sẽ xử lý phản hồi. Hàm này không đồng bộ nên sẽ mất thời gian và mã trong nút. js sẽ không dừng lại.   


Phương thức findOne sử dụng làm đầu vào một phương thức gọi lại sẽ gọi lại sau khi hành động kết thúc. Vì vậy, những gì chúng tôi làm là chuyển đối tượng phản hồi từ bộ điều khiển và khi cơ sở dữ liệu tìm xong đối tượng, phần mềm trung gian của chúng tôi [Trình điều khiển. js] sẽ xử lý phản hồi trở lại.  


Theo ý kiến ​​​​của tôi, nó không đẹp lắm, nhưng hãy nhớ rằng chúng tôi không thể chặn quy trình chính và đợi cho đến khi phản hồi kết thúc


/khách hàng/cam kết

Phương pháp này tương tự như phương pháp mới trước đó vì chúng tôi không cần đợi thông tin được giải quyết


Về lỗi -> Bài tập về nhà

Tôi muốn nói thêm rằng ví dụ này chỉ đang cố gắng chỉ ra cách kết nối dữ liệu với db mysql/mongo như một cách để minh họa cách giải quyết và hoàn thành nó. Tuy nhiên, có nhiều trường hợp mà tôi không dự tính trong đoạn mã này. Điều gì xảy ra nếu máy chủ được cung cấp id không tồn tại? . Tôi đã không dự tính nhiều trong số những trường hợp này vì tôi đã hết thời gian để viết hướng dẫn này. [ [xin lỗi các bạn] nhưng hãy cẩn thận với các phản hồi có thể phát sinh cho từng trường hợp


Để mô phỏng [và thử nghiệm] hệ thống, chúng tôi sẽ sử dụng Postman. Nếu bạn chưa sử dụng người đưa thư, tôi sẽ cố gắng tóm tắt lại cho bạn bằng một mô tả nhỏ. Người đưa thư là gui curl. Nó được sử dụng để mô phỏng các kiến ​​​​nghị đến máy chủ qua đường bưu điện và nhận. Tải xuống chương trình cho máy tính của bạn từ trang web chính thức của họ

How to test

Nếu bạn không sử dụng curl và muốn tìm hiểu cách sử dụng Postman. Tải xuống và cài đặt chương trình. Khi bạn đã cài đặt người đưa thư. kích hoạt nó và tạo một yêu cầu mới

Bây giờ, hãy điền dữ liệu như trong hình sau để kiểm tra việc thêm khách hàng mới. Đảm bảo rằng bạn đang chọn các hộp và điền thông tin bên trong tab Thông số . Ngoài ra, hãy đảm bảo rằng cổng được đặt chính xác. Trong trường hợp của tôi, url là ​localhost. 300/khách hàng/mới

Nhấn gửi và kiểm tra phản hồi của máy chủ cũng như cơ sở dữ liệu của bạn. Bạn có thể sử dụng điều này để kiểm tra cả hai điểm cuối MYSQL và MONGODB và xem phản hồi của máy chủ. Đây là phần giới thiệu nhỏ về cách bạn có thể thực hiện các dịch vụ web  dễ dàng bằng Javascript


Một lần nữa, hãy nhớ rằng tôi đã cố gắng viết phần này thật ngắn gọn, vì vậy tôi sẽ không giới thiệu nhiều khái niệm như kiểm tra lỗi hoặc cách kiến ​​trúc hệ thống của bạn đúng cách. Nhưng điều này có thể cung cấp cho bạn một ý tưởng nhỏ nếu bạn hơi mất phương hướng để biến nó thành hiện thực


Tôi hy vọng bài viết này hữu ích cho bạn. mã hóa công bằng

Đăng nhập với

Facebook Google

Hãy trở thành người đầu tiên bình luận

Our reader's favorite picks

Tạo vùng chứa Joomla Docker

14 tháng 5 năm 2019 Phát triển ứng dụng

Hướng dẫn chuỗi khối Javascript

Ngày 20 tháng 3 năm 2020 Hướng dẫn

Hướng dẫn Docker LAMP

ngày 7 tháng 7 năm 2019 Phát triển ứng dụng

Lưu trữ đối tượng vào cơ sở dữ liệu trong Javascript - Webservice

ngày 9 tháng 6 năm 2020 Hướng dẫn

Nút và Redis qua Docker

ngày 5 tháng 11 năm 2019 Hướng dẫn

Một lưu ý về Vị trí CSS. Sticky và Wrappers

10 tháng 4 năm 2020 Hướng dẫn

Subscribe to our newsletter

Hãy để chúng tôi gửi thư rác cho bạn theo thời gian. Vâng, đó là một chút Thư rác, nhưng Thư rác thú vị, thành thật mà nói, thư rác chất lượng cao

Làm cách nào để lưu mã JavaScript vào cơ sở dữ liệu?

Về cơ bản, cơ sở dữ liệu gồm các đoạn trích. Trong trường hợp đó, hãy lưu trữ nó như lưu trữ bất kỳ loại văn bản nào. .
Nhận tập lệnh giống như bất kỳ đầu vào nào khác của người dùng
Lưu trữ tập lệnh giống như bất kỳ đầu vào nào khác của người dùng trong cơ sở dữ liệu
Get script from database like any other data and echo it between tags..
Tận hưởng trình duyệt gặp sự cố và khai thác XSS. . ]

Chúng tôi có thể lưu trữ chức năng trong MongoDB không?

Không lưu trữ logic ứng dụng trong cơ sở dữ liệu . Có những hạn chế về hiệu suất khi chạy JavaScript bên trong MongoDB.

Làm cách nào để lưu trữ một chức năng trong js?

Có thể sử dụng một giải pháp khác được mô tả bên dưới cùng với các mã ví dụ để giải quyết vấn đề tương tự Hàm lưu trữ Js trong biến. var foo = function[a]{ return a * 2;

Làm cách nào để lưu dữ liệu JavaScript?

Lưu trữ dữ liệu trong Trình duyệt bằng JavaScript .
setItem[key, value] lưu cặp khóa/giá trị
getItem[key] nhận giá trị theo khóa
removeItem[key] xóa khóa và giá trị
clear[] xóa mọi thứ khỏi bộ lưu trữ
khóa [chỉ mục] lấy khóa từ một vị trí nhất định
chiều dài số lượng các mặt hàng được lưu trữ

Chủ Đề