在express中使用app.use('/'),app.get('/')数据未显示在同一网址中

时间:2018-10-03 08:53:50

标签: node.js reactjs express router

  

Link解释了与app.useapp.get的区别。但没有解释相同的路线问题。所以我想问我的问题。

我使用create-react-app进行了react项目,并将服务器放置在src文件夹中。 URL为root时,我想在index.html中显示文本。所以我写这样的代码。

public / index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="theme-color" content="#000000">
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
    <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
    <title>React App</title>
  </head>
  <body>

    <p>Html test</p>

  </body>
</html>

src / server / server.js

import express from 'express';
import path from 'path';

const app = express();
const port = 4000;

app.use('/', express.static(path.join(__dirname, '../../public')));

app.get('/', (req, res) => {
    return res.send('<p>Hello index</p>');
});

app.get('/hello', (req, res) => {
    return res.send('Hello CodeLab');
});

app.listen(port, () => {
    console.log('Express is listening on port', port);
});

package.json

"babel-node": "babel-node src/server/server.js --presets es2015"

我测试

localhost:4000/hello-> Hello CodeLab

localhost:4000/-> HTML测试(非Hello索引

我认为app.use只是静态文件,每次app.get调用相同的URL时都会调用它。为什么app.get('/')在此项目中没有显示<p>Hello index</p>

2 个答案:

答案 0 :(得分:1)

  

为什么app.get('/')在此项目中没有显示<p>Hello index</p>

这取决于顺序。像这样重写:

app.get('/', (req, res) => {
    return res.send('<p>Hello index</p>');
});
app.use('/', express.static(path.join(__dirname, '../../public')));

您肯定会得到<p>Hello index</p>

原因在幕后,app.use()app.get()的行为就像中间件一样,在Express应用程序中被平等对待。出现顺序决定先执行哪个。

答案 1 :(得分:0)

应用程序是在快递开始时初始化的对象。 app.use用于设置中间件More info

要解决此问题,只需删除一条路线的匹配项:

app.use(express.static(path.join(__dirname, '../../public')));

在app中使用'/'。必须使用next()方法,然后express将转到下一个控制器。