Данные app.get ('/') не отображаются в том же URL-адресе, используя app.use ('/') в экспрессе. - PullRequest
0 голосов
/ 03 октября 2018

Эта ссылка объясняет разницу с app.use и app.get.Но не объясняя о той же проблеме маршрута.Поэтому я хочу задать свой вопрос.

Я среагировал на проект с create-react-app и сделал сервер внутри папки src.Я хочу показать текст в index.html, когда URL-адрес является корневым.Поэтому я пишу такие коды:

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 index )

Я думал, app.use - это просто статический файл, который вызывается каждый раз, когда app.get вызывает один и тот же URL.Почему app.get('/') не показывает <p>Hello index</p> в этом проекте?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Почему 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 они обрабатываются одинаково.Порядок появления определяет, какой из них будет выполнен первым.

0 голосов
/ 03 октября 2018

приложение - это объект, инициализированный в начале экспресса.app.use предназначен для установки midleware Дополнительная информация

для решения этой проблемы, просто удалите соответствие для маршрута:

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

С помощью '/' в app.use youнеобходимо использовать метод next (), после чего express перейдет к следующему контроллеру.

...