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

问题描述 投票:0回答:2

我将 Node.js 与 Express 和 EJS 一起使用。

下面是我的代码:

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}`);
})

我的文件夹结构如下:

  • mysql(文件夹)
    • node_modules(文件夹)
    • app4.js(文件)
    • package.json(文件)
    • public(文件夹,包含form_get.html)
    • views(文件夹,包含thankyou.ejs)

问题是无法在视图文件夹中查找

thankyou.ejs

我收到以下错误消息:

错误:无法在视图目录中查找视图“thankyou.ejs” “.../mysql/views”

可能是什么问题?

javascript node.js express ejs node-modules
2个回答
0
投票

当您使用

app.set('view engine', 'ejs');
时,请务必注意,
res.render()
将在
views
文件夹中查找视图。 在这种情况下


我镜像了你的项目,只需进行一些微小的更改就可以正常工作......


项目文件夹和文件结构。


app.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}`);
});

输出:

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


输出:

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


0
投票

渲染

ejs
文件时,不需要使用绝对路径,因为默认情况下它将在
views
文件夹中查找。另外,您不需要指定扩展名
.ejs
。你可以这样做:

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}`);
})
© www.soinside.com 2019 - 2024. All rights reserved.