简体   繁体   English

使用 Express 渲染 ejs 模板时出现问题

[英]Problem in rendering ejs template with Express

I am using Node.js together with Express and EJS.我将 Node.js 与 Express 和 EJS 一起使用。

Below is my code:下面是我的代码:

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');

var app = express();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
var publicPath = path.resolve(__dirname, 'public');
app.use(express.static(publicPath));
//app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

app.get('/form_get.html', (req, res) => {
    res.sendFile(__dirname + "/" + "form_get.html")
})

app.get('/process_get', (req, res) => {

    console.log(req.query.first_name);
    res.render(path.join(__dirname+'/views/thankyou.ejs'), { name: req.query.first_name});
    
})

var server = app.listen(3000, () => {
    
    var host = server.address().address;
    var port = server.address().port;
    console.log(`Example app listening at ${host}:${port}`);
})

My folder structure is below:我的文件夹结构如下:

  • mysql (folder) mysql(文件夹)
    • node_modules (folder)节点模块(文件夹)
    • app4.js (file) app4.js(文件)
    • package.json (file) package.json(文件)
    • public (folder, it contains form_get.html)公共(文件夹,它包含 form_get.html)
    • views (folder, it contains thankyou.ejs)意见(文件夹,它包含thankyou.ejs)

The problem is the failing to look up thankyou.ejs into the views folder.问题是未能将thankyou.ejs 查找到views 文件夹中。

I get the following error message:我收到以下错误消息:

Error: Failed to lookup view "thankyou.ejs" in views directory ".../mysql/views"错误:无法在视图目录“.../mysql/views”中查找视图“thankyou.ejs”

What can be the problem?可能是什么问题?

When rendering an ejs file, you don't need to use an absolute path, as by default it will look inside views folder.渲染ejs文件时,您不需要使用绝对路径,因为默认情况下它会在views文件夹中查找。 Also, you don't need to specify the extension .ejs .此外,您不需要指定扩展名.ejs Try with this:试试这个:

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');

var app = express();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
var publicPath = path.resolve(__dirname, 'public');
app.use(express.static(publicPath));
//app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

app.get('/form_get.html', (req, res) => {
    res.sendFile(__dirname + "/" + "form_get.html")
})

app.get('/process_get', (req, res) => {

    console.log(req.query.first_name);
    res.render('thankyou', { name: req.query.first_name});
    
})

var server = app.listen(3000, () => {
    
    var host = server.address().address;
    var port = server.address().port;
    console.log(`Example app listening at ${host}:${port}`);
})

When You use app.set('view engine', 'ejs');当你使用app.set('view engine', 'ejs'); It is important to note that res.render() will look in a views folder for the view.重要的是要注意res.render()将在views文件夹中查找视图。 In this case在这种情况下


I mirrored Your project and it works fine with couple tiny changes...我镜像了你的项目,它通过几个微小的变化工作得很好......


Project Folder and file structure.项目文件夹和文件结构。

在此处输入图像描述


app.js应用程序.js

var express = require("express");
var path = require("path");
var bodyParser = require("body-parser");

var app = express();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
var publicPath = path.resolve(__dirname, "public");
app.use(express.static(publicPath));
app.set("view engine", "ejs");

app.get("/form_get", (req, res) => {
  res.sendFile(__dirname + "/" + "form_get.html");
});

app.get("/process_get", (req, res) => {
  res.render("thankyou");
});

var server = app.listen(3000, () => {
  var host = server.address().address;
  var port = server.address().port;
  console.log(`Example app listening at ${host}:http://localhost:${port}`);
});

Output: Output:

http://localhost:3000/process_get ( thankyou.ejs ) file. http://localhost:3000/process_get ( thankyou.ejs ) 文件。

在此处输入图像描述


Output: Output:

http://localhost:3000/form_get ( form_get.html ) file http://localhost:3000/form_get( form_get.html )文件

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM