узел js res.render не работает, но res.send работает - PullRequest
0 голосов
/ 16 октября 2019

Я настраиваю среду для узла js app. Но файлы views / ejs не отображаются. Если я делаю:

app.get("/", function(req, res){

     res.send('Hello');
 });

, это работает. Но если я сделаю:

app.get("/", function(req, res){

   res.render("welcome");
});

, это не так.

my app.js

const express = require("express");
const app = express();
const mongoose = require("mongoose");
const indexRoutes = require("./routes/index");
const userRoutes = require("./routes/user");
const ejsLayouts = require("express-ejs-layouts");
const path = require("path");

 mongoose.connect("mongodb://localhost/userAuth", function(err, res) {
    if (err) throw err;
 console.log("Connected to database");
  });

 //EJS
 app.set('view engine','ejs');
 app.use(ejsLayouts); 
 app.use(express.static(__dirname + '/public'));

 app.set('views',path.join(__dirname+'/views'))

 //ROUTES
 app.use("/", indexRoutes);
 app.use("/user", userRoutes);

 app.listen(3000, function() {
      console.log("server started");
  });

мой файл index.js (userLogin / маршруты / индекс. js)

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

  router.get("/",function(req,res){
     res.render("welcome");

   });

  module.exports = router;

структура моей папки

userLogin

/ ..

/ route

   /index.js

/ views

   /welcome.ejs

У меня есть элемент h1 olny в файле welcome.ejs.

Ответы [ 3 ]

0 голосов
/ 17 октября 2019
app.engine('html', require('ejs').renderFile); 

если вы хотите визуализировать .html файлы

, тогда

fs.readFile(path.resolve(__dirname + '/../public/views/logs.html'), 'utf-8', (err, content) => {
    let renderedHtml = ejs.render(content, {'user': req.session.db}); //get redered HTML code
    res.end(renderedHtml);
})
0 голосов
/ 17 октября 2019

у вас должен быть views/layouts/layout.ejs файл, если вы используете express-ejs-layouts npm

внутри app.js:

const ejs =require('ejs');
const ejsLayouts = require("express-ejs-layouts");

app.set('view engine','ejs');
app.use(ejsLayouts); 
app.set('layout', 'layouts/layout');  

layout.ejs файлимеет общий макет, который следует всем файлам

, если вы используете загрузчик, ваш файл layout.ejs будет выглядеть так:

<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

    <title></title>
</head>

<body>

        <?- body ?>

</body>

</html>

, так что теперь на других страницах ejs будет отображаться только содержимое

как welcome.ejs файл

<h1>Welcome Page</h1>
0 голосов
/ 16 октября 2019

Глядя на код, который вы указали, в index.js вы пытаетесь отобразить представление с именем check, когда единственное ваше представление называется welcome. Ваши пути и маршруты выглядят правильно, рендеринг должен работать правильно.

...