express. js request.query пусто - PullRequest
1 голос
/ 19 января 2020

У меня есть URL перенаправления от Google OAuth2, возникает проблема http://localhost:997/?#state=pass-through%20value&access_token=ya29.ImC6B1g9LYsf5siso8n_UphOFB0SXc5dqsm6LqHRWXbtNHisEblxjeLoYtGgwSVtCTGxOjjODiuTyH7VCHoZCEfUd_&token_type=Bearer&expires_in=3599&scope=https://www.googleapis.com/auth/youtube.readonly

, когда я хочу получить access_token от него.

var express = require('express'),
  app = express(),
  port = process.env.PORT || 997;

app.get("/", (req, res, next) => {
    console.log(req.query);
    res.send("hi");
});

app.get("/url", (req, res, next) => {
    res.json('test');
});

app.listen(port, ()=>{
  console.log("Server on port: " + port);
});

вывод после перехода на сайт:

`[nodemon] starting `node main.js`
Server on port: 997
{}

После удаления #state=pass-through%20value, поэтому ссылка выглядит http://localhost:997/?&access_token=ya29.Il-6B4zOwiM7bLeWcyJX9iQGuj3lCGU-6lbnJWdxqcPkBCMkUf8P2xxwMUrFjI-mNNT-X8QEBxA18p1IXsGS5wjiscVMv&token_type=Bearer&expires_in=3599&scope=https://www.googleapis.com/auth/youtube.readonly, работает нормально, и вывод является corect. У кого-нибудь есть идея, что я делаю не так?

1 Ответ

0 голосов
/ 19 января 2020

Удалите # из вашего запроса. Потому что после # знак URL не будет формулироваться . Знак # обычно используется для обозначения конкретных c DOM element id.

Ваш URL должен быть таким,

http://localhost:997/?state=pass-through%20value&access_token=ya29.ImC6B1g9LYsf5siso8n_UphOFB0SXc5dqsm6LqHRWXbtNHisEblxjeLoYtGgwSVtCTGxOjjODiuTyH7VCHoZCEfUd_&token_type=Bearer&expires_in=3599&scope=https://www.googleapis.com/auth/youtube.readonly

Также укажите это QA


Если вы хотите использовать # для передачи Dom element id, вы должны использовать его в конце url

?param=sasad&param2=adsasa#my_element

Если # является частью вашего параметра, то вы должны закодировать его в %23 .. ИЛИ Вы должны отправить его в тело запроса после отправки

...