React-Node.js应用程序无法连接到SQL Server数据库

时间:2019-05-29 19:10:36

标签: node.js sql-server reactjs

这是我第一次尝试这种类型的技术堆栈,我不确定要连接数据库时缺少什么。当我尝试转到/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 :(得分:0)

轻松修复

在React应用程序的package.json中,输入:

“代理”:运行节点应用的基本URI。

例如

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

代理使您的React应用可以像节点服务器一样发出请求。因为“ / api / broker”是节点服务器上的路由,而不是您的react应用程序中的路由。因此,代理允许您的React应用程序发出请求,就好像它是您的节点服务器一样。 URI路径为:

http://localhost:5000/api/broker

即使您的react应用程序正在localhost:3000上运行。如果没有代理,我认为您当前正在访问路由。

http://localhost:3000/api/broker

由于它不是有效路由,因此不会执行任何操作。