Javascript 错误:无法查找“视图”;索引“;在视图目录中

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

本地主机端口在浏览器中出现错误,未加载静态文件。返回错误“无法在视图目录“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\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})