Запрос на удаление коллекции на Mongodb из интерфейса пользователя через экспресс-сервер отправлен дважды - PullRequest
0 голосов
/ 18 октября 2018

В своем реактивном проекте я создал холст, который могут обновлять несколько пользователей.Я использую реагировать, экспресс и мангуст.Когда я хочу очистить холст, у меня есть функция clearDB () в компоненте App.js моего внешнего интерфейса.

clearDB() 
    {
      alert('Clearing Database')
      return fetch(reseturl, {method: 'DELETE'})
        .then(res => res.json())
        .then(res => {
          alert('Deleted:', res.message)
          return res
        })
        .catch(err => console.error(err))
    }

это вызывается прослушивателем событий, инициированным в componentDidMount, когда пользователь нажимает 'z';

В моем экспресс-сервере.

app.delete("/reset", function(req, res) {
  console.log("delete request sent ");
  db.dropCollection("dots", function (err, delOK) {

    if (err) {

        console.log("error delete collection");
        return res;
    } if (delOK) {

        console.log("delete collection success");
        return res;
    }
    return res
});
return res
});

Проблема заключается в том, что коллекция очищается сразу после нажатия клавиши' z ', показывая как опции HTTP на выходе сервера, иснова как УДАЛЕНИЕ около минуты спустя.Это первый вывод, который появляется, как только слушатель события берет нажатие клавиши.

OPTIONS /reset 204 0.320 ms - 0
delete request sent undefined
delete collection success<--(the log from the clearDB function)
GET /message 200 2.022 ms 

Затем, примерно через 2 минуты

POST /message 200 2.293 ms - 16
DELETE /reset - - ms - -
delete request sent undefined
delete collection success<--(the log from the clearDB function, again!)
POST /message 200 372.026 ms - 16

Холст очищается дважды. Пожалуйста, помогите.Ни у кого, похоже, нет этой проблемы!

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Завершение запроса с помощью res.end () остановило непредвиденное поведение.

`app.delete (" / reset ", function (req, res) {console.log (" удалить запрос отправлен "); db.dropCollection (" dots ", function (err, delOK) {

if (err) {console.log ("ошибка удаления коллекции"); вернуть res;}

if (delOK) {console.log ("удалить коллекцию успеха"); вернуть res;}

res.end ();}); return res});`

0 голосов
/ 19 октября 2018

ОПЦИИ - это только предполетный вызов, который отправляется на серверную часть, чтобы определить, правильно ли структурирован ваш запрос на основе серверной части.Вы можете узнать больше о вызове OPTIONS здесь .

Вызов DELETE - это то, что фактически вызывает выполнение кода в обработчике маршрута вашего сервера.

Так что, если только одинВызов DELETE отправляется для одного события, затем эта часть работает правильно.

Если, однако, у вас все еще есть проблема, она должна быть где-то еще в коде, который вы не опубликовали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...