【发布时间】:2021-06-26 02:38:02
【问题描述】:
本地主机端口在浏览器中出现错误并且没有加载我的静态文件。返回错误'无法在视图目录“C:\Users\xxxx\Desktop\contact form\views”中查找视图“索引”'。即使我创建了一个查看我的静态文件的目录,它仍然返回相同的错误。我的节点 js 版本是 v14.16.0,我使用的是 chrome 浏览器。请帮忙!
堆栈跟踪错误
Error: Failed to lookup view "index" in views directory "C:\Users\xxxx\Desktop\contact form\views"
at Function.render (C:\Users\xxxx\Desktop\contact form\node_modules\express\lib\application.js:580:17)
at ServerResponse.render (C:\Users\xxxx\Desktop\contact form\node_modules\express\lib\response.js:1012:7)
at C:\Users\xxxx\Desktop\contact form\server.js:22:7
at Layer.handle [as handle_request] (C:\Users\xxxx\Desktop\contact form\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\xxxx\Desktop\contact form\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\xxxx\Desktop\contact form\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\xxxx\Desktop\contact form\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\xxxx\Desktop\contact form\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\xxxx\Desktop\contact form\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\xxxx\Desktop\contact form\node_modules\express\lib\router\index.js:275:10)
我的静态文件位于名为“index.handlebars”的公用文件夹中。我的节点服务器代码在公用文件夹之外 这是我的 package.json 文件
{
"name": "contact-form",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"author": "mahnuel",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1",
"express-handlebars": "^5.3.0",
"nodemailer": "^6.5.0"
}
}
我的节点服务器代码是这样的
const express = require('express');
const bodyParser = require('body-parser');
const exphbs = require('express-handlebars');
const path = require('path');
const nodemailer = require('nodemailer');
const app = express();
// View engine setup
app.engine('handlebars', exphbs());
app.set('view engine', 'handlebars');
// Static folder
app.use('/public', express.static(path.join(__dirname, 'public')));
// Body Parser Middleware
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.get('/', (req, res) => {
res.render('index');
});
app.post('/send', (req, res) => {
const output = `
<p>You have a new contact request</p>
<h3>Contact Details</h3>
<ul>
<li>Name: ${req.body.client}</li>
<li>Email: ${req.body.email}</li>
</ul>
<h3>Message</h3>
<p>${req.body.message}</p>
`;
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: 'site.com',
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: 'email.com', // generated ethereal user
pass: 'password' // generated ethereal password
},
tls:{
rejectUnauthorized:false
}
});
// setup email data with unicode symbols
let mailOptions = {
from: '"Nodemailer Contact" <email.com>', // sender address
to: 'mail.com', // list of receivers
subject: 'Node Contact Request', // Subject line
text: 'Hello world?', // plain text body
html: output // html body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
res.render('index', {msg:'Email has been sent'});
});
});
app.listen(8000, () => console.log('Server started...'));
【问题讨论】:
-
您遇到的错误是哪一行?您能否根据How to Ask 上的指南编辑您的问题以提供您看到的确切堆栈跟踪?
-
不确定我是否明白错误是在哪里引发的,但我添加了一个指向存储库的链接,以便您自己查看
-
不幸的是,作为个人政策,我不倾向于关注本网站上的外部链接,除非有很好的理由这样做。如果您认为该链接中有与您的问题相关的特定信息,您应该编辑您的问题以包含此类信息。根据How to Ask,您的问题不应依赖第三方来源,而应“独立” - 外部链接往往会随着时间的推移而中断和变化,并耗尽您问题的未来访问者的大部分价值。 (1/2)
-
您能否在问题正文中包含您遇到的错误的完整堆栈跟踪?那应该指向你的代码有问题的部分。最后(有点切题),我建议重新访问您的 Node.js 调试基础。 (2/2)
-
来回抱歉。请与我裸露,因为我仍然是一个菜鸟。我对这个问题做了一些修改,我希望它让它更清楚一点
标签: javascript node.js express handlebars.js