【问题标题】:Express Server - GET request returns a 404 (Not Found)Express 服务器 - GET 请求返回 404(未找到)
【发布时间】:2017-03-10 13:40:21
【问题描述】:

我会切入正题...所以我试图从我的 react (redux) 应用程序向我的服务器发出 GET 请求。据我所知,我已经正确设置了我的快速服务器(我的很多服务器都针对服务器端渲染进行了优化)

这是我的 redux 操作

import axios from "axios";

export function fetchTweets() {
    return function(dispatch) {
        dispatch({
            type: "FETCH_TWEETS"
        })
        axios.get("/api/articles")
            .then((response) => {
                dispatch({
                    type: "FETCH_TWEETS_FULFILLED",
                    payload: response.data
                })
            })
            .catch((err) => {
                dispatch({
                    type: "FETCH_TWEETS_REJECTED",
                    payload: err
                })
            })
    }
}

这是我的 Express 服务器

import path from 'path';
import express from 'express';
import webpack from 'webpack';
import middleware from './src/middleware';

const app = express();

//------------------------

if (process.env.NODE_ENV === 'development') {
    const config = require('./webpack.config.dev');
    const compiler = webpack(config);
    app.use(require('webpack-dev-middleware')(compiler, {
        noInfo: true,
        publicPath: config.output.publicPath,
        stats: {
            assets: false,
            colors: true,
            version: false,
            hash: false,
            timings: false,
            chunks: false,
            chunkModules: false
        }
    }));
    app.use(require('webpack-hot-middleware')(compiler));
    app.use(express.static(path.resolve(__dirname, 'src')));
} else if (process.env.NODE_ENV === 'production') {
    app.use(express.static(path.resolve(__dirname, 'dist')));
}

app.get('*', middleware);

//---------------------------

//connect to mongo db
var db
const MongoClient = require('mongodb').MongoClient
MongoClient.connect('mongodb://###:###@ds123930.mlab.com:23930/halftimefront', (err, database) => {
    if (err) return console.log(err);
    db = database
    console.log('db connected');
})


app.get('/api/articles', (req, res) => {
        console.log("test");
    var articles = [];
    //var articles2 = [];
    db.collection('articles').find().toArray().then(result => {
        articles = articles.concat(result);
    }).then(() => {
        console.log(articles);
        res.send(articles);
    }).catch(e => {
        console.error(e);
    });
});



app.listen(3000, '0.0.0.0', (err) => {
    if (err) {
        console.error(err);
    } else {
        console.info('Listening at http://localhost:3000');
    }
});

当我从我的 redux 操作发出 GET 请求时,它会在我的客户端控制台中返回它

GET http://localhost:3000/api/articles 404(未找到)

我在网上搜索并找不到解决问题的方法,对我来说 GET 请求看起来正确,也许我没有正确设置我的快递服务器?

感谢任何帮助或建议,在此先感谢您!

【问题讨论】:

    标签: javascript node.js reactjs express get


    【解决方案1】:

    总是在列出所有其他路由之后放置'*' 路由。

    app.get('/api/articles', function() {});
    app.get('*', middleware);
    

    【讨论】:

    • 我的意思是* 匹配每条路线,所以当你点击'/api/article' 时,它会匹配你的app.get('*', middleware);,而不是你的下一条路线app.get('/api/article', middleware);。所以你应该相应地订购你的路线。
    【解决方案2】:

    你应该改变:

    app.get('*', middleware);
    

    app.use(middleware);
    

    当您在开始时创建路由“*”时,它将捕获所有路由。如果你想为所有请求添加中间件,你应该使用app.use

    如果你只想给一个请求添加中间件

    app.get('/route', middleware1, middleware2, (req, res) => {
        res.send('route with middlewares');
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 2020-03-09
      相关资源
      最近更新 更多