首页 文章

正在发送HTML而不是JSON数据

提问于
浏览
-1

我正在尝试从SQL数据库中检索数据并在Reactjs Web应用程序上显示所述数据 . 但是,我对数据库进行的所有调用都会导致网页的HTML成为焦点 . 我设置了 Headers ,我试图改变快递调用的响应处理方式 .

这是我现在使用的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 .

2 回答

  • 0

    如果你移动你的顶部,它应该工作 . 问题似乎是static子句在到达您的 endpoints 之前解析了您的请求,因此如果您这样做:

    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的路径将尝试匹配 .

    理想情况下,您希望将其他 endpoints 置于不同的命名空间下,即 /api ,但如果您决定保留设置,这应该会有所帮助 .

  • 0

    我认为你的路线可能相互冲突 . 来自快递文件:http://expressjs.com/en/4x/api.html#app.use

    // 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');
    });
    

    因此,您的路由 '/counselling/triageadmin/getTable' 将永远不会到达,因为您的路由 '/counselling/triageadmin/' 正在拦截它,并使用静态资源进行响应 .

    要解决此问题,请尝试以将所有API请求放在不同子文件夹(如 '/api' )的方式组织路径 . 所以你的 getTable endpoints 位于: '/api/counselling/triageadmin/getTable/' 或类似的东西 .

相关问题