Javascript 错误:无法查找“视图”;索引“;在视图目录中
本地主机端口在浏览器中出现错误,未加载静态文件。返回错误“无法在视图目录“C:\Users\xxxx\Desktop\contact form\views”中查找视图“index”。即使为静态文件创建视图目录,它仍会返回相同的错误。我的NodeJS版本是v14.16.0,我使用chrome浏览器。请帮忙 堆栈跟踪错误Javascript 错误:无法查找“视图”;索引“;在视图目录中,javascript,node.js,express,handlebars.js,Javascript,Node.js,Express,Handlebars.js,本地主机端口在浏览器中出现错误,未加载静态文件。返回错误“无法在视图目录“C:\Users\xxxx\Desktop\contact form\views”中查找视图“index”。即使为静态文件创建视图目录,它仍会返回相同的错误。我的NodeJS版本是v14.16.0,我使用chrome浏览器。请帮忙 堆栈跟踪错误 Error: Failed to lookup view "index" in views directory "C:\Users\xxxx\Desk
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.handlebar”的公用文件夹中。我的节点服务器代码在公用文件夹之外
这是我的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...'));
const express=require('express');
const bodyParser=require('body-parser');
const exphbs=require('express-handlebar');
const path=require('path');
const nodemailer=require('nodemailer');
常量app=express();
//查看引擎设置
发动机附件(“把手”,exphbs());
应用程序集(“查看引擎”、“把手”);
//静态文件夹
app.use('/public',express.static(path.join('public'));
//体解析器中间件
use(express.urlencoded({extended:false}));
使用(express.json());
应用程序获取(“/”,(请求,请求)=>{
res.render(“索引”);
});
app.post('/send',(req,res)=>{
常量输出=`
您有一个新的联系请求
联系方式
- 名称:${req.body.client}
- 电子邮件:${req.body.Email}
消息
${req.body.message}
`;
//使用默认SMTP传输创建可重用的传输对象
让transporter=nodeEmailer.createTransport({
主持人:“site.com”,
港口:465,
安全:true,//对于465为true,对于其他端口为false
认证:{
用户:'email.com',//生成的ethereal用户
pass:'password'//生成的以太密码
},
tls:{
拒绝:错误
}
});
//使用unicode符号设置电子邮件数据
让邮件选项={
发件人:“‘nodeEmailer联系人’,//发件人地址
收件人:'mail.com',//收件人列表
主题:'节点联系请求',//主题行
text:“Hello world?”,//纯文本正文
html:output//html正文
};
//使用定义的传输对象发送邮件
transporter.sendMail(邮件选项,(错误,信息)=>{
如果(错误){
返回console.log(错误);
}
console.log('发送的消息:%s',info.messageId);
log('预览URL:%s',nodeEmailer.getTestMessageUrl(信息));
res.render('index',{msg:'Email has sent'});
});
});
app.listen(8000,()=>console.log('Server started…');
您可能犯了一个错误,请确保您的视图文件在正确的路径中,就像在src下检查一样。在我的情况下,我遇到了类似的错误,所以我将视图放在src下
您可以通过为Express提供新的
路径调用app.set
为“视图”选项设置新值。下面的例子
将Express配置为在templates/views/中查找视图。版本1.0 45
const viewsPath = path.join(__dirname, '../templates/views')
app.set('views', viewsPath)
你遇到的错误是哪一行?您是否可以编辑您的问题,以提供您根据上的指南看到的确切堆栈跟踪?我甚至不确定是否理解错误抛出的位置,但我添加了一个指向存储库的链接,以便您可以自己查看不幸的是,作为个人政策,我不倾向于在这个网站上关注外部链接,除非有很好的理由这样做。如果您觉得该链接中有与您的问题相关的特定信息,您应该编辑您的问题以包含此类信息。根据,你的问题不应该依赖于第三方来源,而应该是“独立的”——外部链接往往会随着时间的推移而中断和改变,并耗尽你问题的未来访问者的大部分价值。(1/2)你能在问题的主体中包含你所遇到的错误的完整堆栈跟踪吗?这应该指向代码中有问题的部分。最后,我建议您重新访问Node.js调试基础。(2/2)很抱歉来回的电话。请跟我说实话,因为我还是个笨蛋。我对这个问题做了一些修改,希望能让它更清晰一些。我添加了一个图片,你可以看到,在回答问题时,请检查你的语法,以帮助读者理解你的信息。此外,尝试改进问题的格式(例如,将代码与文本的其余部分分开),以提高答案的清晰度。谢谢,很抱歉,时间太晚了。这似乎解决了我的问题
consthbs=exphbs.create({extname:'.hbs',defaultLayout:null})代码>