使用ExpressJS

时间:2017-08-09 09:13:29

标签: node.js express fitbit

我正在尝试从Fitbit API的回调网址中捕获参数值。

回拨网址如下所示,

http://localhost:9000/callback#access_token= ********&安培; USER_ID = *******&安培;范围=睡眠+ +设置营养+活动+社会+心率+轮廓+重量+位置&安培; token_type =承载&安培; expires_in = 30418415

我已在fitbit API中将回调网址称为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}!`);
});

我无法弄清楚问题所在。

2 个答案:

答案 0 :(得分:1)

网址中的#符号是引入 framgent标识符 。因此,您的回调网址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

答案 1 :(得分:0)

  

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

如果您使用req.params,请在网址中指定密钥参数

   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);
});