反应不与节点服务器通信

时间:2020-04-22 16:23:19

标签: node.js reactjs express server

为了完成此项目,我需要让我的客户端与我的服务器通信。 我想要的是:'/ auth'应该只返回字符串“ Authorize”。 我收到的是:index.html中所有标记的字符串副本。

前端,使用reactJS:

 authorize()
  {
      fetch('/auth')
        .then(res => res.text())
        .then(data=>{
            console.log('auth'+data)
        })
        .catch(err => err);
  }

  async componentDidMount()
  {
      try
      {       
        this.authorize();
      }
      catch(e)
      {
          console.log(e);
      }
  }

后端:

 var createError = require('http-errors');
    var express = require('express');
    var path = require('path');
    var cookieParser = require('cookie-parser');
    var logger = require('morgan');
    var cors = require("cors");

    const dotenv = require('dotenv');
    dotenv.config();

    const jwt = require('express-jwt');
    const jwksRsa = require('jwks-rsa');

    var indexRouter = require("./routes/index");
    var authRouter = require("./routes/auth");

    var app = express();
    app.use(cors());

    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');

    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));

    app.use('/', indexRouter);
    app.use('/auth', authRouter);

路由器示例:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function (req, res, next) 
{ 
  res.send("router/index");
});

module.exports = router;

1 个答案:

答案 0 :(得分:1)

app.use将自动匹配扩展基本路由的所有路由(在您的情况下为/),这就是为什么/*将处理对indexRouter的所有请求的原因。有关更多详细信息,请参见http://expressjs.com/en/guide/using-middleware.html

解决此问题的一种方法是更改​​顺序:

app.use('/auth', authRouter);
app.use('/', indexRouter);