正在发送HTML而不是JSON数据

正在发送HTML而不是JSON数据,json,reactjs,express,axios,node-mssql,Json,Reactjs,Express,Axios,Node Mssql,我试图从SQL数据库中检索数据,并在Reactjs web应用程序上显示这些数据。然而,我对数据库的所有调用都会导致焦点网页的HTML。我已经设置了标题,并尝试更改处理express调用响应的方式 下面是我现在正在使用的expressjs脚本: const express = require('express'); const sql = require('mssql/msnodesqlv8'); const bodyParser = require('body-parser'); const

我试图从SQL数据库中检索数据,并在Reactjs web应用程序上显示这些数据。然而,我对数据库的所有调用都会导致焦点网页的HTML。我已经设置了标题,并尝试更改处理express调用响应的方式

下面是我现在正在使用的expressjs脚本:

const express = require('express');
const sql = require('mssql/msnodesqlv8');
const bodyParser = require('body-parser');
const path = require('path');
const cors = require('cors');
const db = require('./db.js');

var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use('/counselling/triageadmin/', express.static(path.join(__dirname, '/build')));
app.use(cors());

app.get('/getTable', function (req, res, next){
    var request = new sql.Request(db);
    request.query('select * from Counselling order by TicketID desc', (err, result) =>{
        if (err) { return next(err); }
        res.setHeader('Content-Type', 'application/json');
        res.send(JSON.stringify(result["recordset"]));
    });
});
从这里开始,我的axios调用如下所示:

componentWillMount(){
  let self = this;
  axios.get("/getTable")
  .then(function (response){
    console.log(response.data);
    self.setState({
      data: response.data,
    });
  })
  .catch(function (error){
      console.log(error);
  })
}
我添加了console.log来检查返回的内容,如前所述,这是当前焦点页面的HTML代码


我做了一些修改,以反映出我采取了哪些措施来发行500种股票。但是,当前的代码会导致404。

如果您将get移到put的顶部,它应该会工作。问题似乎是static子句在请求到达端点之前解析请求,因此如果执行此操作:

app.get('/counselling/triageadmin/getTable', function (req, res, next){
    var request = new sql.Request(db);
    request.query('select * from Counselling order by TicketID desc', (err, result) =>{
        if (err) { return next(err); }
        res.setHeader('Content-Type', 'application/json');
        res.send(JSON.stringify(result["recordset"]));
    });
});
app.use('/counselling/triageadmin/', express.static(path.join(__dirname, '/build')));
在路由到静态文件之前,将尝试匹配get的路径


理想情况下,您希望rest端点位于不同的命名空间下,即
/api
,但如果您决定保留设置,这应该会有所帮助。

我认为您的路由可能会相互冲突。从位于以下位置的express documentation:

因此,您的路径
'/consultation/triageadmin/getTable'
将永远无法到达,因为您的路径
'/consultation/triageadmin/'
正在拦截它,并使用静态资源进行响应


要解决此问题,请尝试以将所有API请求放在不同子文件夹的方式组织路由,如
'/API'
。因此,您的
getTable
端点将位于:
'/api/consultation/triageadmin/getTable/'
或类似位置。

我也在学习均值堆栈,我偶然发现了您的问题,因为我遇到了相反的问题。我希望它用HTML而不是JSON来响应

这行代码使其以HTML响应

res.send(JSON.stringify(结果[“记录集]))


(我尝试了
res.send("HTML实际上是怎么说的?可能它报告了505错误或其他错误。它实际上不是一个错误,get请求只是发回了我索引的HTML。HTML页面可能是你的应用程序在不同的路径中路由
/consultation/triageadmin/getTable
。有时会发生这种情况,因为
应用程序的顺序和使用。使用
。你可能会这样做想一想。我更新了我的脚本来反映我做了什么,但是它给了我404。我试着给每个休息端点自己的名字(/GETABLE)。,但这将导致404。只有当我有前缀时,我才能得到500个错误。当你这样做时,你是否更新了前端的路径?在我看来,你可能忘记了这么做,这将证明404是正确的。我刚刚做了;我在server.js脚本中更改了“/getTable”路径,并将其更改为axios.get(“/getTable”)。仍然会导致404。然后,您可能需要将完整路径添加到UI调用中,因为相对链接可能不再正确。请尝试直接从浏览器中点击它。嘿,我实际上已尝试将每个路由设置为自己的路径。正如我在下面的评论中所说,我在server.js脚本中将其设置为“/getTable”路径,并将其更改为axios.get(“/getTable”)。它会导致404。您是否尝试使用外部工具(如Curl或Postman)请求URL?
// this middleware will not allow the request to go beyond it
app.use(function(req, res, next) {
  res.send('Hello World');
});

// requests will never reach this route
app.get('/', function (req, res) {
  res.send('Welcome');
});