【问题标题】:error:failed to look up view "index" in views directory错误:无法在视图目录中查找视图“索引”
【发布时间】: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


【解决方案1】:

你可能犯了一个错误,确保你的视图文件在正确的路径中,就像它在 src 下检查一样,我遇到了类似的错误,所以我把视图放在 src 下

您可以通过向 Express 提供新的 小路。调用app.set 为“views”选项设置一个新值。下面的例子 将 Express 配置为在 templates/views/.Version 1.0 45 中查找视图

const viewsPath = path.join(__dirname, '../templates/views')
app.set('views', viewsPath)

【讨论】:

  • 我添加了一张你看到的图片
  • 在回答问题时,请检查您的语法,以帮助读者理解您的信息。此外,请尝试改进问题的格式(例如,将代码与文本的其余部分分开)以提高答案的清晰度。
  • 谢谢你,抱歉这来晚了。这似乎为我解决了问题const hbs = exphbs.create({ extname: '.hbs', defaultLayout: null });
猜你喜欢
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2020-08-08
  • 2022-11-30
  • 1970-01-01
  • 2018-11-01
相关资源
最近更新 更多