MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak dokonać wyboru obrazu za pomocą ejs i express?

Nie jestem do końca pewien, czy rozumiem Twoje pytanie, ale zobaczmy, czy mogę pomóc w tym, co myślę, że wiem. Myślę, że musisz być w stanie wybrać niektóre obrazy, które są renderowane za pomocą pliku .ejs, przechowywać adresy URL obrazu w tablicy za pośrednictwem JS po stronie klienta, a następnie wysłać tę tablicę w żądaniu POST do serwera Express.

Oto jak bym to zrobił, używając twojego kodu jako podstawy:

Strona klienta

Utworzyłem plik .ejs, który renderował niektóre obrazy, które mój serwer Express wysłał w zmiennej lokalnej „images”:

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

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

Następnie mam plik .js, który dodaje obrazy, które są klikane do tablicy "imageSelection" przy użyciu detektora zdarzeń na <div> który otacza obrazy:

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

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

I wreszcie, gdy użytkownik kliknie przycisk „Dodaj wybór obrazu”, obrazy z tablicy „imageSelection” są wysyłane za pośrednictwem żądania pobrania do punktu końcowego „http://localhost:3001/post-images „. Do addImageButton dołączony jest eventListener, który nasłuchuje zdarzenia „click”, więc nie potrzebujesz <form> element:

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));
});

Po stronie serwera

Po stronie Express mam konfigurację obsługi trasy dla żądania POST /post-images, która po prostu odsyła dane POST do żądającego:

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

Tak więc, dla twoich celów, ten wzorzec pozwala użytkownikowi wybrać obrazy, a następnie kliknąć przycisk, a adresy URL tych obrazów są wysyłane na serwer. Jeśli nie tego szukasz, wyjaśnij, a postaram się pomóc.

Obecnie jest sobota, 11-16-2019 o 21:34 GMT, kiedy to edytuję, a wychodzę z domu i nie będę w stanie pomóc przez kolejne 20 godzin, więc nie oczekuj odpowiedź przed 17:30 GMT w niedzielę, 11-17-2019.

Przesłałem kod do repozytorium git tutaj , po prostu postępuj zgodnie z instrukcjami w README i powinieneś być w stanie przetestować go na swoim komputerze. Pliki, które chcesz sprawdzić w tym przykładzie, to:

  • widoki/index.ejs
  • public/javascripts/main.js
  • trasy/index.js

Oto obraz interfejsu użytkownika z zarejestrowaną odpowiedzią po wybraniu dwóch pierwszych obrazów:




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wybrać dane z podanym warunkiem

  2. Jak usunąć pole z dokumentu MongoDB ($unset)

  3. MongoDB - wyszukiwanie według daty i godziny za pomocą sterownika C#

  4. MongoError:użytkownik nie może wykonywać akcji

  5. Sprawdź, czy dokument istnieje w mongodb za pomocą es7 async/await