【问题标题】:Can't catch the URL parameters with ExpressJS无法使用 ExpressJS 捕获 URL 参数
【发布时间】:2017-08-09 09:13:28
【问题描述】:

我正在尝试从来自 Fitbit API 的回调 URL 中捕获参数值。

回调 URL 如下所示,

http://localhost:9000/callback#access_token=********&user_id=*******&scope=sleep+settings+营养+活动+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=30418415

我在 fitbit API 中通过回调 URL 声明为 http://localhost:9000/callback

我的 ExpressJS 代码如下。

const express = require('express');
const morgan = require('morgan');
const path = require('path');

const app = express();


app.use(morgan(':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] :response-time ms'));


app.use(express.static(path.resolve(__dirname, '..', 'build')));


app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, '..', 'build', 'index.html'));
});

const PORT = process.env.PORT || 9000;

app.get('/callback', function(req, res) {
    var access_token = req.param('access_token') || null;
    var user_id = req.param('user_id') || null;

    res.send(access_token + ' ' + user_id);
});

app.listen(PORT, () => {
    console.log(`App listening on port ${PORT}!`);
});

我不知道问题出在哪里。

【问题讨论】:

    标签: node.js express fitbit


    【解决方案1】:

    URL 中的# 符号用于引入帧标识符。所以你的回调 url http://localhost:3000/callback#access_token=********&user_id=*******&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=30418415 只会得到http://localhost:3000/callback 不会向你的服务器发送任何参数。所以,你不能直接在你的服务器中获取这些参数。

    但是有解决方案。请参考这个answer

    【讨论】:

      【解决方案2】:

      req.param('token') 被折旧使用 req.params.token 将值直接传递到 url

      如果您使用的是 req.params,请在 url 中指定您的关键参数

         app.get('/callback/:access_token/:user_id', function(req, res) {
         //url ==> localhost:9000/callback/1233/123
          var access_token = req.params.access_token || null;
              var user_id = req.params.user_id || null;
                 console.log(req.params)
              res.send(access_token + ' ' + user_id);
          });
      

      如果你想捕获 url 中的值意味着使用 req.query 而不是 req.params 使用 req.query 的键传递值

      app.get('/callback',function(req, res) {
          var access_token = req.query.access_token || null;
          var user_id = req.query.user_id || null;
          console.log(req.query);
          res.send(access_token + ' ' + user_id);
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-01
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-10
        • 1970-01-01
        相关资源
        最近更新 更多