Аварийный сервер node.js - PullRequest
       3

Аварийный сервер node.js

0 голосов
/ 07 декабря 2018

Доброе утро, я прошу вашей помощи для моего проекта.Я хочу отобразить радугу шесть характеристик, так как этот API: https://www.npmjs.com/package/rainbowsix-api-node

Я создал серверный узел и выразить, фронт реакции.Моя проблема: мой серверный сбой узла останавливается 3 раза из 5, он нестабилен, и я заметил, что запрашиваемый npm-сервер r6 хорошо работает в непиковые часы.Я запускаю сервер с запуском npm, но когда я обновляю свое приложение реагирования, сервер часто останавливается и отображает это

после нескольких поисков, я не понимаю, откуда может возникнуть проблема;Спасибо за вашу помощь !

Консоль возвращает это:

Server is listening on port 5000
undefined:1
<!DOCTYPE html>
^

SyntaxError: Unexpected token < in JSON at position 0

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! back@1.0.0 start: `node index`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the back@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

код моей спины:

const RainbowSixApi = require('rainbowsix-api-node');
const express = require('express');
const app = express();
const port = 5000;
const statsRouter = require('./routes/stats');
const R6 = new RainbowSixApi();

//let username = '<username here>';
let platform = 'ps4';

app.get('/api/stats/:username', (req, res) => {
  const username = req.params.username;

R6.stats(username, platform).then(response => {
    res.send(response);
  }).catch(error => {
    console.error(error)
  });
});


app.use('/api/stats', statsRouter)

app.listen(port, (err) => {
  if (err) {
    throw new Error('Erreur')
  }
  console.log(`Server is listening on port ${port}`);
});

Мой код реакции

class Cards extends Component {

  constructor(props) {
    super(props);
    this.state = {
      statsArray: []
    };
  }

  componentDidMount(){
    const urls =
    [
      '/api/stats/username1',
      '/api/stats/username2',
      '/api/stats/username3',
      '/api/stats/username4',
      '/api/stats/username5',
    ]

    let promiseArray = urls.map(url => axios.get(url).then(response => response.data).catch(error => { console.error(error) }));

    Promise.all(promiseArray)
      .then(statsArray => this.setState({ statsArray }))
      }

1 Ответ

0 голосов
/ 07 декабря 2018

Это не твоя проблема.Это проблема кода 'rainbowsix-api-node'.

Поскольку в часы пик вместо возврата значения JSON возвращается страница HTML (скорее всего, страница с ошибкой).

Увидел код в GitHub, именно здесь генерируется ошибка.

request.get(endpoint, (error, response, body) => {
    if(!error && response.statusCode == '200') {
        return resolve(JSON.parse(body));
    } else {
        return reject(JSON.parse(body));
    }
})

Теперь, что вы можете сделать, это просто try..catch it.

app.get('/api/stats/:username', (req, res) => {
    const username = req.params.username;
    try{
        R6.stats(username, platform).then(response => {
            res.send(response);
        }).catch(error => {
            console.error(error)
        });
    }catch(error){
        console.error(error);
    };
});
...