这是我第一次尝试这种类型的技术堆栈,我不确定要连接数据库时缺少什么。当我尝试转到/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);
});
答案 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
由于它不是有效路由,因此不会执行任何操作。