MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm thế nào để thực hiện một lựa chọn hình ảnh với ejs và thể hiện?

Tôi không chắc mình hiểu câu hỏi của bạn, nhưng hãy xem liệu tôi có thể giúp gì cho những gì tôi nghĩ là tôi biết không. Tôi nghĩ rằng bạn cần có thể chọn một số hình ảnh được hiển thị qua tệp .ejs, lưu trữ url của hình ảnh trong một mảng thông qua JS phía máy khách, sau đó gửi mảng đó trong một yêu cầu POST đến máy chủ Express.

Đây là cách tôi sẽ làm điều đó, sử dụng mã của bạn làm cơ sở:

Phía khách hàng

Tôi đã tạo một tệp .ejs hiển thị một số hình ảnh mà máy chủ Express của tôi gửi qua trong một biến cục bộ 'hình ảnh':

<div id="image-container">
  <% images.forEach((image) => { %>
     <a href="#"><img src="<%= image.url %>"></a>
  <% }) %>
</div>

<button id="add-image-button">Add Image Choice</button>

Sau đó, tôi có tệp .js bổ sung các hình ảnh được nhấp vào mảng 'imageSelection' bằng cách sử dụng trình xử lý sự kiện trên <div> bao bọc các hình ảnh:

const imageContainer = document.getElementById('image-container');
const imageSelection = [];

imageContainer.addEventListener('click', (e) => {
  if (!imageSelection.includes(e.target.src)) {
    imageSelection.push(e.target.src);
  }
});

Và cuối cùng, khi người dùng nhấp vào nút 'Thêm Lựa chọn Hình ảnh', các hình ảnh trong mảng 'ImageSelection' sẽ được gửi qua một yêu cầu tìm nạp đến điểm cuối ' http:// localhost:3001 / post-images '. AddImageButton có một eventListener được gắn vào nó để lắng nghe sự kiện 'nhấp chuột', vì vậy bạn không cần <form> phần tử:

const addImageButton = document.getElementById('add-image-button');

addImageButton.addEventListener('click', async () => {
  const url = 'http://localhost:3001/post-images';
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(imageSelection)
  });
  const myJson = await response.json();
  console.log(JSON.stringify(myJson));
});

Phía máy chủ

Về phía Express, tôi có một thiết lập trình xử lý định tuyến cho yêu cầu POST / post-images mà chỉ cần gửi lại dữ liệu POST-ed cho người yêu cầu:

router.post('/post-images', (req, res, next) => {
  res.json(req.body);
});

Vì vậy, theo mục đích của bạn, mẫu này cho phép người dùng chọn hình ảnh và sau đó nhấp vào nút và url của những hình ảnh đó được gửi đến máy chủ. Nếu đó không phải là những gì bạn đang tìm kiếm, hãy làm rõ và tôi sẽ cố gắng giúp đỡ.

Hiện tại là Thứ Bảy, ngày 16 tháng 11 năm 2019 lúc 9:34 tối theo GMT vì tôi đang chỉnh sửa nội dung này và tôi đang rời khỏi nhà và sẽ không thể hỗ trợ trong 20 giờ nữa, vì vậy đừng mong đợi phản hồi trước 5:30 chiều GMT vào Chủ Nhật, ngày 17 tháng 11 năm 2019.

Tôi đã đẩy mã của mình lên git repo tại đây , chỉ cần làm theo hướng dẫn trong README và bạn sẽ có thể kiểm tra nó trên máy của mình. Các tệp bạn muốn kiểm tra cụ thể cho ví dụ này là:

  • lượt xem / index.ejs
  • public / javascripts / main.js
  • route / index.js

Đây là hình ảnh của giao diện người dùng, với phản hồi được ghi lại sau khi chọn hai hình ảnh đầu tiên:




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Node kiểm tra xem objectid có hợp lệ không

  2. Tại sao một cơ sở dữ liệu MongoDB trống lại quá lớn?

  3. MongoDB đếm các mục trong mảng

  4. Meteor:Mã thoát mongo không mong muốn 100. Đang khởi động lại. Không thể khởi động máy chủ mongo

  5. Mongo db with Monk:bắt lỗi và xử lý nếu db bị lỗi