Estoy bloqueado desde hace 3 días e hice mi investigación en Internet. Aquí está el código.
api.js
const express = require('express'); const router = express.Router(); var http = require('http'); var https = require("https"); router.get('/github', async function (req, res) { https.get('https://api.github.com/v3/users/tmtanzeel', function (apiRes) { apiRes.pipe(res); }).on('error', (e) => { console.error(e); res.status(500).send('Something went wrong'); }); });Producción:
Solicitud prohibida por normas administrativas. Asegúrese de que su solicitud tenga un encabezado de agente de usuario ( http://developer.github.com/v3/#user-agent-required ). Consulte https://developer.github.com para conocer otras causas posibles.
Encontré algo útil aquí:
Pero estos no fueron muy útiles.
Probé: res.setHeader("User-Agent", "My App"); pero no estoy muy seguro sobre el segundo argumento.
Servidor.js modificado
const express = require('express'); const app = express(); const api = require('./routes/api'); const cors = require('cors'); app.use(cors()); app.use(function (req, res, next) { // Website you wish to allow to connect res.setHeader('Access-Control-Allow-Origin', '*'); // Request methods you wish to allow res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); // Request headers you wish to allow res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); // Set to true if you need the website to include cookies in the requests sent // to the API (eg in case you use sessions) res.setHeader('Access-Control-Allow-Credentials', true); res.setHeader("User-Agent", "My App"); // <-------------ADDED HEADER HERE // Pass to next layer of middleware next(); }); app.use('/api', api); app.get('/', function (req, res) { res.send('Server is up and running!'); }) app.listen(3000, function () { console.log('Server listening on 3000 port'); });¿Alguna vez te has enfrentado a este tipo de problema? Por favor ayuda.
Está configurando encabezados para su respuesta. En su lugar, debe establecer encabezados en la llamada a la API que realice. Puede pasar el objeto de options al método http.get() y establecer encabezados allí.
router.get('/github', async function (req, res) { const options = { hostname: 'api.github.com', path: '/v3/users/tmtanzeel', headers: { 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1521.3 Safari/537.36' } } https.get(options, function (apiRes) { apiRes.pipe(res); }).on('error', (e) => { console.error(e); res.status(500).send('Something went wrong'); }); });Vea esta respuesta sobre cómo configurar el encabezado del agente de usuario de github: