-
Notifications
You must be signed in to change notification settings - Fork 0
/
server-api.ts
64 lines (54 loc) · 1.46 KB
/
server-api.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const express = require("express");
const logger = require('morgan');
const path = require('path');
const https = require('https');
const fs = require('fs');
const server = express();
const cors = require('cors');
const axios = require('axios');
server.use(cors({
'origin': 'http://localhost:8080',
'methods': 'GET',
}));
server.options('*', cors());
server.use(logger('combined'));
server.get('/api', function (req, res) {
const instance = axios.create({
baseURL: "https://api.fitbit.com/",
timeout: 5000,
headers: {"Authorization": "Bearer " + req.query.token}
});
instance.get(req.query.query)
.then((response) => {
handleResponse(response, res);
})
.catch((error) => {
handleError(error, req, res);
});
});
function refreshToken(oldToken) {
console.log("refreshing token");
axios.get("http://localhost:3000/refreshToken?token=" + oldToken)
.then((newToken) => {
console.log("newToken", newToken);
return newToken;
});
}
function handleError(error, req, res) {
if (error.response.status === 401) {
if (req.query.refreshToken) {
const newToken = refreshToken(req.query.token);
} else {
res.status(401).send("unauthorized");
}
}
}
function handleResponse(response, res) {
if (response.data) {
res.status(200).send(response.data);
} else {
res.status(404).send("no data");
}
}
const PORT = 4000;
server.listen(PORT, () => console.log('listening to port', PORT));