Как использовать ОБА res.sendFile ();и res.send ();в Node.js? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть этот код:

server.get("/chat", (req, res) => {
    let query = url.parse(req.url, true).query;
    console.log(query.channel);
    let rueckgabe = {
        channel: query.channel
    };
    res.sendFile('chat.html', { root: path.join(__dirname, 'public/') });
    res.send(JSON.stringify(rueckgabe));
});

Я не могу использовать как res.sendFile, так и res.send.Как я могу использовать оба в server.get?

Другой подход

Если я попробую что-то подобное, он выполнит только первый код.

server.get("/chat", (req, res) => {
    let query = url.parse(req.url, true).query;
    console.log(query.channel);
    let rueckgabe = {
        channel: query.channel
    };
    res.send(JSON.stringify(rueckgabe));
});

server.get("/chat", (req, res) => {
    res.sendFile('chat.html', { root: path.join(__dirname, 'public/') });
});

Таким образом, результат будетполучать rueckgabe, но без html страницы.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Решение

Чтобы получить параметры на стороне клиента, вам нужно использовать эту функцию:

function searchToObject() {
  var pairs = window.location.search.substring(1).split("&"),
    obj = {},
    pair,
    i;

  for ( i in pairs ) {
    if ( pairs[i] === "" ) continue;

    pair = pairs[i].split("=");
    obj[ decodeURIComponent( pair[0] ) ] = decodeURIComponent( pair[1] );
  }

  return obj;
}

var urlParameters = searchToObject();

Если вам не нужны параметры URL с сервера, вы можете сделатьэто так.urlParameters содержит объект json с параметрами url.

0 голосов
/ 13 декабря 2018

Вы не можете использовать и res.send(), и res.sendFile() в одном и том же маршруте и методе, потому что каждый запрос имеет только один ответ, и каждый вызывается первым, это ваш ответ.

но вы можете использовать другой метод, сначала сделайте ajax post запрос в 'chat' и получите его 'rueckgabe' данные в обратном вызове, затем перейдите к вашему новому маршруту, например '/ chat? Data = кое-что'.например, измените свой код следующим образом: (для получения дополнительной информации о params )

server.post("/chat/:channel", (req, res) => {
    let query = req.params;   
    console.log(query.channel);
    let rueckgabe = {
        channel: query.channel
    };
    res.json(JSON.stringify(rueckgabe));
});

server.get("/chat", (req, res) => {
    res.sendFile('chat.html', { root: path.join(__dirname, 'public/') });
});

также вы можете использовать этот способ, но это странный подход, потому что теперь вы пропустите ваши rueckgabe данные:

res.send(JSON.stringify(rueckgabe));
// "Warning:" use redirect after send is not routine and usual
res.redirect('/chat');  // redirect to chat with GET method

, поэтому нормально обрабатывать их на стороне клиента и делать новый запрос в ответном обратном вызове.

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