повторно.отправить токен, а затем перенаправить

#javascript #node.js #express

#javascript #node.js #выразить

Вопрос:

У меня есть экспресс-приложение, которое при вызове запроса get немедленно возвращает строковый токен, а затем запускает код python. Код python через некоторое время создает файл json, который мне нужно отправить в другом запросе post.

Этот код python может вызываться разными пользователями, поэтому мне нужно назначить им токен a сразу после вызова приложения. В запросе post я также буду изменять файл json, а затем отправлять его обратно

Я пытаюсь выполнить res.отправить токен, а затем res.перенаправить на запрос post, но я знаю, что это невозможно. Есть ли какой-либо другой способ, которым я мог бы отправить токен или перенаправить на запрос post?

 app.get('/', (req, res) =>{
     res.send(token())
     runPython((code)=>{ 

     *takes around 10 sec*

       res.redirect('/post')}}

app.post('/post', (req, res)=>{

     *do stuff to file*

     res.sendFile()
  

Комментарии:

1. Не могли бы вы рассказать нам о том, почему вы пытаетесь это сделать? Тогда, возможно, мы могли бы помочь вам найти другое решение (чем то, что вы делаете сейчас).

2. @Take-Some-Bytes добавил немного больше деталей

3. Не лучше ли было бы просто связать обещания, а затем создать новый путь?

4. @Kimimomo Смогу ли я отправить токен, а затем отправить файл в том же запросе get?

5. Можете ли вы отправить токен и файл за один раз или для следующей функции нужен код или что-то в этом роде

Ответ №1:

Вы не можете отправить клиенту несколько ответов, разделенных по времени. Вы получаете ОДИН http-ответ. Итак, как только вы закончите res.send(token()) , этот http-запрос будет выполнен. Вы не можете отправлять больше данных как часть этого http-запроса.

Поскольку вы описываете вещи, вот некоторые из ваших вариантов:

  1. Объединить оба в один ответ.Подождите отправки токена, пока не получите ответ python, а затем отправьте их оба в одном ответе JSON. Вы не сможете выполнить a res.redirect() , если вы также отправляете данные обратно. Итак, вы можете отправить местоположение перенаправления обратно в JSON и попросить клиента вручную выполнить перенаправление (просто установив window.location новый URL-адрес). Предположительно, на стороне клиента в любом случае есть Javascript на принимающей стороне, поскольку какая-то форма кода в любом случае должна получать токен, чтобы сделать с ним что-то полезное.

  2. Используйте websocket / socket.соединение ввода-вывода для последующего обмена данными, инициируемого сервером.Попросите клиента подключить веб-сокет или сокет.подключение ввода-вывода. Затем вы можете ответить с помощью токена, а затем позже, когда python завершит работу, вы можете отправить дополнительные данные через websocket или сокет.подключение ввода-вывода. Для этого потребуется дополнительный код, чтобы иметь возможность связать конкретный веб-сокет / сокет.соединение ввода-вывода с клиентом, который отправил этот запрос, чтобы вы могли определить, какой веб-сокет / сокет.соединение ввода-вывода для этого запроса для отправки уведомления.

  3. Опрос на стороне клиента для завершения операции python.Попросите сервер отправить обратно токен, а также отправить ему какой-то идентификатор запроса, а затем клиент может опрашивать сервер каждые несколько секунд, чтобы спросить сервер, выполнена ли эта операция python для этого идентификатора запроса. Когда он получает ответ от сервера о том, что python теперь завершен, клиент может вручную перенаправить себя /post , чтобы получить окончательные данные.