Реагировать js - express: res.send Vs res.render Error - PullRequest
1 голос
/ 05 февраля 2020

Я создаю очень маленький пример приложения для практики страницы входа. Я работаю с:

1) Bootstrap

2) Bootswatch - в частности, с журнальной формой

3 ) Font Awesome

После успешной настройки всех моих компонентов у меня возникает очень странная ошибка, если я применяю следующее изменение в моем index.js файле, отвечающем за рендеринг моего localhost: окно 5000

router.get('/', (req, res) => res.send('welcome')); <-- This way works

router.get('/', (req, res) => res.render('welcome')); <-- This way throws error

приложение. js

const express = require('express');
const expressLayouts = require('express-ejs-layouts');

const app = express();
app.use(expressLayouts);
app.set('view engine', 'ejs');

// Routes
app.use('/', require('./routes/index'));
app.use('/users', require('./routes/users'));

const PORT = process.env.PORT || 5000;
app.listen(PORT, console.log(`Server started on port ${PORT}`));

индекс. js

const express = require('express');
const router = express.Router();
router.get('/', (req, res) => res.send('welcome')); // <-- This way works
router.get('/', (req, res) => res.render('welcome')); // <-- This way throws error
module.exports = router;

пользователей. js

const express = require('express');
const router = express.Router();

// Login Page
router.get('/login', (req, res) => res.send('Login'));
// Register Page
router.get('/register', (req, res) => res.send('Register'));
module.exports = router;

layouts.e js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="https://kit.fontawesome.com/My_KIT.js" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="../components/bootstrap.min.css" />
    <title>App</title>
</head>
<body>
    <div class="container">
        <%- body %>
    </div>
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

</body>
</html>

Ошибка:

Ошибка: не удалось найти представление "layout" в каталоге представлений "/ home / emanuele / Desktop / cashman-tracker-dashboard / views" в Function.render (/home/emanuele/Desktop/cashman-tracker-dashboard/node_modules/express/lib/application.js:580:17) в ServerResponse.render (/ home / emanuele / Desktop / cashman-tracker- панель инструментов / node_modules / express / lib / response. js: 1012: 7) в / home / emanuele / De sktop / cashman-tracker-dashboard / node_modules / express -e js -layouts / lib / express -layouts. js: 113: 20 в tryHandleCache (/ home / emanuele / рабочий стол / cashman-tracker- панель инструментов / node_modules / ejs / lib / e js. js: 260: 5) на View.exports.renderFile [в качестве движка] (/ home / emanuele / рабочий стол / cashman-tracker-dashboard / node_modules / ejs / lib /ejs.js:459:10) в View.render (/home/emanuele/Desktop/cashman-tracker-dashboard/node_modules/express/lib/view.js:135:8) в tryRender (/home/emanuele/Desktop/cashman-tracker-dashboard/node_modules/express/lib/application.js:640:10) в Function.render (/ home / emanuele / рабочий стол / приборная панель отслеживания наличных денег / node_modules / express / lib / application. js: 592: 3) в ServerResponse.render (/home/emanuele/Desktop/cashman-tracker-dashboard/node_modules/express/lib/response.js:1012:7) в ServerResponse .res.render (/home/emanuele/Desktop/cashman-tracker-dashboard/node_modules/express-ejs-layouts/lib/express-layouts.js:77:18)

Чем я занимаюсь пока что:

1) Я подумал, что это ошибка из-за метода render, и пошел, чтобы проверить официальную документацию об этом , но я не увидел ни одной проблема с небольшой частью написанного мною кода.

2) Также предоставляется экран печати, если его легче понять:

print

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

1 Ответ

1 голос
/ 05 февраля 2020

В каталоге поиска нет view с именем welcome.

Когда вы используете res.send('welcome'), express отправит ответ с welcome text, поэтому не искать никаких view страниц.

Но с другой стороны, когда вы используете res.render, он будет искать представление template с именем welcome.ejs.

res.render используется для загрузки e js файла просмотра

Создайте файл с помощью welcome.ejs и попробуйте.

Надеюсь, что это решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...