Express Server - GET请求返回404(未找到)

时间:2017-03-10 13:40:22

标签: javascript node.js reactjs express get

我会切入追逐......所以我正在尝试从我的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请求时,它会在我的客户端控制台中返回

  

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

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

感谢任何帮助或建议,提前谢谢!

2 个答案:

答案 0 :(得分:2)

列出所有其他路线后,始终放置'*'路线。

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

答案 1 :(得分:0)

你应该改变:

app.get('*', middleware);

app.use(middleware);

当您在开头创建路由'*'时,它将捕获所有路由。如果要为所有请求添加中间件,则应使用app.use

如果您只想将中间件添加到一个请求

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