Nodejs相关问题:我在看《nodejs开发指南》,有迷惑。express如何默认生成ejs的网站结构,我按书上的打,获得的还是jade。还有第100页,出现"partial is not defined"求帮助。

Nodejs相关问题:我在看《nodejs开发指南》,有迷惑。express如何默认生成ejs的网站结构,我按书上的打,获得的还是jade。还有第100页,出现"partial is not defined"求帮助。

28 回复

Nodejs相关问题:我在看《nodejs开发指南》,有迷惑。express如何默认生成ejs的网站结构,我按书上的打,获得的还是jade。还有第100页,出现"partial is not defined"求帮助。


问题描述

我正在阅读《Nodejs开发指南》,遇到了两个问题:

  1. 我想使用 EJS 作为模板引擎,但按照书中的步骤设置后,Express 依然使用 Jade(现在叫 Pug)作为默认模板引擎。
  2. 在第100页的代码中,我遇到了 partial is not defined 的错误。

解决方案

1. 设置 Express 使用 EJS 模板引擎

首先,你需要确保你已经安装了 EJS 模板引擎。你可以通过 npm 安装它:

npm install ejs --save

然后,在你的应用入口文件(通常是 app.jsserver.js)中,明确指定使用 EJS 作为模板引擎:

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

// 设置模板引擎为 EJS
app.set('view engine', 'ejs');

// 示例路由
app.get('/', (req, res) => {
    res.render('index', { title: 'Hello from EJS' });
});

app.listen(3000, () => console.log('App listening on port 3000'));
2. 解决 “partial is not defined” 错误

partial 通常是一个自定义的函数或库,用于包含部分视图。如果你在书上看到的例子中使用了 partial,那么你需要自己定义它或引入相应的库。例如,你可以创建一个名为 partials 的目录,并编写一个简单的 partial 函数:

// 在 routes.js 或其他合适的地方定义 partial 函数
function partial(res, name) {
    res.partial(name);
}

或者,你可以在模板中直接使用 EJS 的 <%- include('partialName') %> 语法来包含部分视图,而不是使用 partial 函数。

示例代码

假设你有一个简单的项目结构如下:

project/
├── views/
│   ├── index.ejs
│   └── partials/
│       └── header.ejs
├── app.js
└── package.json

app.js

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

app.set('view engine', 'ejs');

app.get('/', (req, res) => {
    res.render('index', { title: 'Hello from EJS' });
});

app.listen(3000, () => console.log('App listening on port 3000'));

views/index.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><%= title %></title>
</head>
<body>
    <!-- 包含部分视图 -->
    <%- include('./partials/header.ejs') %>
</body>
</html>

views/partials/header.ejs

<header>
    <h1>Header Content</h1>
</header>

通过以上步骤,你应该能够解决你的问题并正确配置 Express 使用 EJS 模板引擎。


本群有本书的作者。

express -e 项目名称

我想问下,在那个地方输入express -e 项目名称,我在cmd上一输入就报出不是命令或应用

npm install -g express 全部命令

   首先创建一个 microblog 文件夹
    然后 打开 命令CMD  进入 microblog这个文件夹
    npm install express  注意这里一定要在 microblog文件夹下运行
    npm install jade
    npm install  ejs
    express -e ejs  microblog
    搞定。。。。。初学者有错请说

没有生成 layout.ejs,自己手动添加一个,默认页面index.ejs居然没有使用layout.ejs

作者写的时候还是express 2.0 现在已经3.0了 很多都变了 不过大体思路是一致的

layout在3.0中取消了需要安装个express-partial的东西,准备

你可以看一下那个package.json包,里面默认是jade,修改以下

这个很easy ,使用webstorm 建个新的project 。一下子就ok了。

+1 修改够npm install

搭车同问。 我最近也在看这本书,有个问题。 模板引擎用的也是ejs,但是为什么不会去引用layout.ejs. 在route下的index.js 中,指定了也不会引用了,也没去加载?

<p>这样输入也同样实现:</p>

npm install express -g
npm install ejs -g
express -e ejs microblog

我之前做的时候也遇到过,确实是nodejs版本的问题

都升级了,要跟上时代 用include代替layout吧

试验OK !

在express中使用ejs的模版引擎,但是不知道其中在什么地方调用了layout.html这个模版。3d打印

ejs要使用layout得引入express-ejs-layouts,可以去github上看看使用方法enter link description here

恩 同问

使用include: <ul> <% items.forEach(function(listitem){ %> <% include listitem %> <% }) %> </ul>

需要安装express-partials包 详细看这里http://cnodejs.org/topic/50c1a0ed637ffa4155d05256

在views下新建一个layout.ejs 文件

在app.js中进行配置 var partials = require(‘express-partials’ ); // 启用layout app.use(partials());

layout就启用了

我也在看这本书接触nodejs

这本书的微博例子,没有说创建mongodb的数据库创建?

哦,数据自动载入,但是运行例子还是报错。。。

我把ejs给换成twig了. 恩. 不想用华丽的语词来介绍. 反正自认为写出的模板就像面向对象一样, 还能继承呢. 自己去看吧. PHP 的 Symfony2的默认模板引擎就是它.

不仅是继承模板, 还能继承block

之前用的是jade, 发现不支持block 继承, 于是换了. 不过jade的写法真爽

针对你的问题,可以分为两部分来解答:

1. 如何让Express默认使用EJS模板引擎

Express框架默认支持多个模板引擎,包括Jade(现在叫Pug),EJS等。你可以通过指定模板引擎来改变默认设置。以下是如何将Express默认的模板引擎设置为EJS的步骤:

安装EJS

首先,确保已经安装了EJS模块。如果没有安装,可以通过npm进行安装:

npm install ejs --save

修改app.js或server.js文件

在应用初始化时,通过app.set()方法来设置模板引擎。例如,在项目根目录下的app.js文件中添加以下代码:

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

// 设置模板引擎为EJS
app.set('view engine', 'ejs');

// 路由示例
app.get('/', (req, res) => {
    res.render('index'); // 渲染名为index.ejs的视图
});

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

这样,当你运行应用时,它会默认寻找以.ejs结尾的模板文件。

2. 解决"partial is not defined"

如果你在尝试使用部分模板(partial)时遇到错误,这通常是因为没有正确加载或调用该功能。在EJS中,使用<%- include('path/to/template') %>来包含另一个模板。例如,假设你有一个名为header.ejs的部分模板,可以在其他模板中这样使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <!-- 使用include来引入其他模板 -->
    <%- include('header') %>
    <p>Welcome to the home page!</p>
</body>
</html>

确保你的路径是正确的,并且header.ejs存在于预期的位置。

通过以上修改,你应该能够解决这两个问题并顺利地使用EJS模板引擎。

回到顶部