Почему мое веб-приложение Express / React выдает ошибку 500 при обновлении страницы? - PullRequest
0 голосов
/ 28 августа 2018

Я создаю веб-приложение Express / React, которое ссылается на базу данных MSSQL. Когда я запускаю сервер, я получаю код состояния 200, и приложение прекрасно работает. Однако, когда я обновляю страницу, запрос не выполняется, и я получаю код состояния 500. Я считаю, что это проблема с базой данных, потому что все компоненты работают с жестко закодированными данными.

Вот код, который я использую в бэкэнде, и я уверен, что он перехватывает при первой проверке ошибок в блоке mssql.connect. Я удалил свою конфиденциальную информацию, но она не актуальна.

var express = require('express');
var router = express.Router();
var helpers = require('./helperFunctions');

/* GET records. */
router.get('/', function(req, res, next) {

  var mssql = require('mssql/msnodesqlv8');

  //Set up configuration for MSSQL
  const config = {
    server: 'irrelevant',
    options: {
      trustedConnection: true 
    }
  }

  //Connect to the DB
  mssql.connect(config, function (err) {
    if (err) console.log(err);

    //Create Request object & query string to isolate assets 
    var request = new mssql.Request();
    var queryRequest = "irrelevant"
           
    //Query to the database and get the records
    request.query(queryRequest, function (err, recordset) {
      if (err) console.log(err)

      //Send recordset as a response, recordset.recordsets[0] is just the isolated
      //array of server components.
      res.json(helpers.sortData(recordset.recordsets[0]));
    });

  });

});


module.exports = router;

и это фрагмент компонента реакции, который получает информацию.

componentDidMount() {
    /*When this component mounts, retrieve the json data from our express 
    backend service, and set the state to this data. */
    fetch('/users')
      .then(res => res.json())
      .then(users => this.setState({ users }));
  }

Я подозреваю, что это связано с ошибкой соединения с базой данных, но я довольно плохо знаком с webdev, поэтому могу ошибаться. Полученная ошибка указывает на эту строку во втором фрагменте кода:

.then(res => res.json())

А вот и ссылка на сообщение об ошибке: https://imgur.com/a/feKGU56

1 Ответ

0 голосов
/ 28 августа 2018

Функция маршрута вызывается каждый раз, когда делается запрос. Поэтому каждый раз, когда вы запрашиваете этот маршрут, вы создаете соединение с БД. (Я полагаю, что маршрут "/", который вы показываете, имеет тот же код, что и маршрут "/users" ваших вызовов React.)

Сначала попытайтесь закрыть соединение в конце обратного вызова request.query. Если это больше не дает 500, это было проблемой: укладка соединений.

Во-вторых, переместите весь код, обрабатывающий соединение (config, mssql.connect), из маршрута и вызовите его только один раз при загрузке сервера. Помимо лучшей практики, это увеличит время отклика вашего маршрута. (Ну, я никогда не использовал MSSQL, но нет причин, по которым он должен отличаться от других СУБД, верно? ^^)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...