Express服务器路由问题-不允许其他路由仅在本地路由下工作

时间:2018-08-06 08:18:53

标签: reactjs express react-router apollo-client

我正在与React一起使用GraphQL,但遇到了路由问题。 这主要来自快递,App可以在本地路由“ localhost:4000 /”上正常工作,但是在其他“ localhost:4000 / song”之外,我会收到“无法获取/歌曲”错误。

完整代码为:Lyrical-GraphQL Demo

这是我的server.js文件:

const express = require('express');
const models = require('./models');
const expressGraphQL = require('express-graphql');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const schema = require('./schema/schema');

const app = express();

// Replace with your mongoLab URI
const MONGO_URI = 'mongodb://XXX:XXX@ds123371.mlab.com:23371/lyricaldb';
if (!MONGO_URI) {
    throw new Error('You must provide a MongoLab URI');
}

mongoose.Promise = global.Promise;
mongoose.connect(MONGO_URI);
mongoose.connection
    .once('open', () => console.log('Connected to MongoLab instance.'))
    .on('error', error => console.log('Error connecting to MongoLab:', error));


app.use(bodyParser.json());
app.use('/graphql', expressGraphQL({
    schema,
    graphiql: true
}));

const webpackMiddleware = require('webpack-dev-middleware');
const webpack = require('webpack');
const webpackConfig = require('../webpack.config.js');
app.use(webpackMiddleware(webpack(webpackConfig)));

module.exports = app;

3 个答案:

答案 0 :(得分:0)

您需要定义路线和要渲染的各个组件。这可能会有帮助,

https://gist.github.com/siakaramalegos/df4620c52e829f6107c75d5c3f0ad7f5

答案 1 :(得分:0)

那是因为请求将发送到服务器。您看到的错误是来自快递服务器。

您需要在server.js中添加一个处理程序,以捕获所有其他类似这样的请求

app.get('*', function(req, res) {
  res.sendfile('path-to-your-index-html');
});

事实上,我认为这个post可能有用。

答案 2 :(得分:0)

我解决了这个问题,实际上问题不是来自服务器端路由,而是HashRouter和react-router的BrowserRouter之间的混淆。

目前,我正在使用HashRouter,并且工作正常。对于BrowserRouter,您需要从服务器端正确设置所有路由。

感谢社区!