【已解决】Nodejs中express用jade实现hello world但是遇到点问题

【已解决】Nodejs中express用jade实现hello world但是遇到点问题

大家好,我在用express和jade做一个hello world 但是遇到点问题 不知道怎么错的。 我的jade,都是用的tab键来空格。我不知道问题出在哪里

1.jpg

控制台输出: listening on port 3000 访问页面后 输出: Error: No default engine was specified and no extension was provided. at new View (e:\hellword\node_modules\express\lib\view.js:41:42) at Function.app.render (e:\hellword\node_modules\express\lib\application.js:509:12) at ServerResponse.res.render (e:\hellword\node_modules\express\lib\response.js:900:7) at e:\hellword\app.js:7:6 at Layer.handle [as handle_request] (e:\hellword\node_modules\express\lib\router\layer.js:82:5) at next (e:\hellword\node_modules\express\lib\router\route.js:100:13) at Route.dispatch (e:\hellword\node_modules\express\lib\router\route.js:81:3) at Layer.handle [as handle_request] (e:\hellword\node_modules\express\lib\router\layer.js:82:5) at proto.handle.c (e:\hellword\node_modules\express\lib\router\index.js:234:24) at Function.proto.process_params (e:\hellword\node_modules\express\lib\router\index.js:312:12)

我的目录结构和package.json xx.jpg


4 回复

【已解决】Nodejs中express用jade实现hello world但是遇到点问题

大家好,我在尝试使用Express和Jade模板引擎实现一个简单的“Hello World”应用时遇到了一些问题。具体来说,我想要通过Jade渲染一个简单的HTML页面,并显示“Hello World”。

问题描述

当我运行应用并访问页面时,控制台输出了一些错误信息。看起来是没有正确指定默认的模板引擎或没有提供文件扩展名。

控制台输出

listening on port 3000
访问页面后 输出:
Error: No default engine was specified and no extension was provided.
at new View (e:\hellword\node_modules\express\lib\view.js:41:42)
at Function.app.render (e:\hellword\node_modules\express\lib\application.js:509:12)
at ServerResponse.res.render (e:\hellword\node_modules\express\lib\response.js:900:7)
at e:\hellword\app.js:7:6
at Layer.handle [as handle_request] (e:\hellword\node_modules\express\lib\router\layer.js:82:5)
...

目录结构和package.json

我的项目目录结构如下:

/hellword
  /views
    index.jade
  app.js
  package.json

package.json 文件内容如下:

{
  "name": "hellword",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "jade": "^1.11.0"
  }
}

解决方案

在Express 4.x版本中,默认不再内置对Jade的支持。你需要手动安装pug(Jade的继任者)作为模板引擎。以下是修改后的代码示例:

  1. 安装 pug 模板引擎:

    npm install pug --save
    
  2. 修改 app.js 文件,确保指定了正确的模板引擎:

    var express = require('express');
    var app = express();
    
    // 设置模板引擎为pug
    app.set('view engine', 'pug');
    
    // 设置视图文件夹
    app.set('views', './views');
    
    // 路由处理
    app.get('/', function(req, res) {
      res.render('index', { title: 'Hello World' });
    });
    
    // 启动服务器
    app.listen(3000, function () {
      console.log('App listening on port 3000!');
    });
    
  3. views/index.pug 文件中编写以下内容:

    doctype html
    html
      head
        title= title
      body
        h1 Hello World!
    

这样设置后,当你访问页面时,应该会看到“Hello World!”的输出,并且不会再有之前的错误。

希望这个解决方案对你有所帮助!


app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');****

根据你的描述,错误信息表明没有指定默认的渲染引擎,并且也没有提供文件扩展名。这是因为从 Express 4.x 版本开始,Express 默认不再包含模板引擎。你需要手动安装并配置模板引擎。

假设你使用的是 Jade(现称为 Pug),你需要先确保已经安装了 pug 模板引擎。可以使用以下命令安装:

npm install pug --save

然后,在你的应用初始化代码中设置视图引擎为 Pug,例如在 app.js 中添加如下代码:

const express = require('express');
const path = require('path');

const app = express();

// 设置模板引擎为 Pug
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.get('/', function(req, res) {
    res.render('index', { title: 'Hello World' });
});

app.listen(3000, () => {
    console.log('Listening on port 3000');
});

创建一个名为 views/index.pug 的文件,内容如下:

doctype html
html(lang='en')
  head
    title= title
  body
    h1 Hello World!

这样配置之后,再次运行你的应用,访问首页应该就能看到 “Hello World!” 的输出了。

通过这些步骤,你应该能够解决你遇到的问题。如果还有其他错误,请检查你的路径设置以及文件命名是否正确。

回到顶部