Приложение React-Node.js не может подключиться к базе данных SQL Server - PullRequest
0 голосов
/ 29 мая 2019

Я впервые пытаюсь использовать этот тип стека, и я не уверен, чего мне не хватает, чтобы подключить мою базу данных. Когда я пытаюсь перейти на /api/broker, он просто долго загружается ... также я никогда не получаю сообщение о том, что сервер работает из моего / маршрута.

Когда я прекращаю загрузку маршрута /api/broker, я получаю это сообщение:

Ошибка прокси: для получения дополнительной информации см. https://nodejs.org/api/errors.html#errors_common_system_errors (ECONNRESET).

Как мне заставить SQL Server принять соединение? Есть идеи, что я упускаю или делаю неправильно?

Это мой app.js

import React, { Component } from 'react';
import './App.css';
import Header from './components/header';
// import './server';


class App extends Component {
  state = {
      data: null
    };
  
    componentDidMount() {
        // Call our fetch function below once the component mounts
      this.callBackendAPI()
        .then(res => this.setState({ data: res.express }))
        .catch(err => console.log(err));
    }
      // Fetches our GET route from the Express server. (Note the route we are fetching matches the GET route from server.js
    callBackendAPI = async () => {
      const response = await fetch('/api/broker');
      const body = await response.json();
  
      if (response.status !== 200) {
        throw Error(body.message) 
      }
      return body;
    };

    render() {
    return (
      <div className="App">
        <Header />
          <p>
            Edit <code>src/App.js</code> and save to reload.
          </p>
      
      </div>
    );
}
}

export default App;

А это мой файл server.js:

const express = require("express");
const bodyParser = require ("body-parser");
const sql = require('mssql');
const app = express();

app.use(express.static('public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use(function(res, req, next){
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS, POST, PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType, Content-Type, Accept, Authorization");
    next();
});

var dbConfig = {
    user: "user",
    password: "password",
    server: "jdbc:sqlserver://sql3\\misc",
    database: "ReactApp_DB"
};

//Function to connect to database and execute query
var  executeQuery = function(res, query){             
    sql.connect(dbConfig, function (err) {
        if (err) {   
                    console.log("Error while connecting database :- " + err);
                    res.send(err);
                 }
                 else {
                        // create Request object
                        var request = new sql.Request();
                        // query to the database
                        request.query(query, function (err, res) {
                          if (err) {
                                     console.log("Error while querying database :- " + err);
                                     res.send(err);
                                    }
                                    else {
                                      res.send(res);
                                      console.log("Querying database ");
                                           }
                              });
                      }
     });           
}

app.get('/', function(req, res) {
	res.send('Server is working...');
});

//GET API
app.get("/api/broker", function(req , res){
    console.log('brokers queried: ');
    var query = "select * from [broker]";
    executeQuery (res, query);
});

var server = app.listen(3000, function (){
    var port = server.address().port;
    console.log("app now running on port ", port);
});

1 Ответ

0 голосов
/ 29 мая 2019

Легко исправить

в вашем package.json в приложении React введите:

"proxy": базовый URI, на котором работает приложение узла.

например

  "proxy": "http://localhost:5000"

Прокси - это то, что позволяет вашему реагирующему приложению отправлять запросы, как если бы это был сервер узла. Потому что / api / broker - это маршрут на вашем сервере узлов, а не в вашем приложении реагирования. Таким образом, прокси позволяет вашему приложению реагировать на запросы так, как если бы это был ваш сервер узлов. с путем URI:

http://localhost:5000/api/broker

даже если ваше приложение реакции работает на localhost: 3000. Без прокси я предполагаю, что вы в данный момент только получаете доступ к маршруту.

http://localhost:3000/api/broker

, который ничего не делает, так как это недопустимый маршрут.

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