Nodejs render里面给view(ejs)传递参数,怎么接收不了呢

Nodejs render里面给view(ejs)传递参数,怎么接收不了呢

                    var friends = [“Tom”,“Joe”];
//friends=friends.toString();
res.render(‘index’, {
title : ‘欢迎来到我的主页’,
friends : friends
});

//view模板用的是ejs,在index里面<%=friends%>获取不了friends哎~ //字符串接收是好的,怎么获取friends呢~ ~


6 回复

当然可以。让我们来详细分析一下这个问题,并提供一个示例代码来解决它。

问题描述

你尝试在 Node.js 中通过 res.render 方法向 EJS 模板传递一个数组参数 friends,但在 EJS 模板中无法正确显示该数组的值。

分析

  1. 数据类型:你提到将数组转换为字符串后可以正常工作。这说明 EJS 模板在处理数组时遇到了一些问题。
  2. EJS 渲染:EJS 模板引擎默认会将变量作为字符串处理,对于数组或对象需要使用特定的语法来遍历或访问它们。

解决方案

示例代码

首先确保你的 Node.js 后端代码正确传递了参数:

var express = require('express');
var app = express();
app.set('view engine', 'ejs');

app.get('/', function(req, res) {
    var friends = ["Tom", "Joe"];
    res.render('index', {
        title: '欢迎来到我的主页',
        friends: friends
    });
});

app.listen(3000, function() {
    console.log('App is running on port 3000');
});

然后,在 EJS 模板文件(例如 views/index.ejs)中,你可以使用以下代码来遍历并显示数组中的每个元素:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><%= title %></title>
</head>
<body>
    <h1><%= title %></h1>
    <ul>
        <% friends.forEach(function(friend) { %>
            <li><%= friend %></li>
        <% }); %>
    </ul>
</body>
</html>

解释

  1. Node.js 部分

    • app.set('view engine', 'ejs') 设置了视图引擎为 EJS。
    • res.render('index', { ... })titlefriends 传递给 EJS 模板。
  2. EJS 模板部分

    • <%= title %> 直接输出字符串。
    • <% friends.forEach(function(friend) { %> ... <% }); %> 使用 EJS 的循环语法来遍历数组 friends 并逐个输出每个朋友的名字。

通过这种方式,EJS 模板能够正确地解析和显示数组中的每个元素。希望这能解决你的问题!


试试friends.length

你的friends是个数组,你需要循环遍历这个数组

不可以传数组的么。。。

对不住啊,这个不知道怎么回事,上午还接收不了= =,现在又可以了,数组,json都可以了,谢谢了!!

在Node.js中使用EJS渲染视图时,如果你在res.render中传递了一个数组作为参数,并且在EJS模板中无法正确显示,可能是因为EJS默认情况下不支持直接遍历数组。你需要使用EJS的循环语法来遍历数组。

示例代码

假设你的路由处理函数如下:

const express = require('express');
const app = express();
app.set('view engine', 'ejs');

app.get('/', (req, res) => {
    var friends = ["Tom", "Joe"];
    res.render('index', {
        title: '欢迎来到我的主页',
        friends: friends
    });
});

app.listen(3000);

EJS模板(views/index.ejs)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><%= title %></title>
</head>
<body>
    <h1><%= title %></h1>
    <ul>
        <% friends.forEach(function(friend) { %>
            <li><%= friend %></li>
        <% }); %>
    </ul>
</body>
</html>

解释

  1. Node.js部分

    • res.render中传递了一个对象,其中包含titlefriends两个属性。
    • friends是一个数组。
  2. EJS模板部分

    • 使用<% ... %>标签包裹EJS脚本。
    • 使用friends.forEach方法遍历数组,并在每个元素上输出一个列表项。

这样,你可以通过EJS的循环语法正确地遍历数组并显示数组中的元素。

回到顶部