我想在 NestJS 中使用 EJS 作为模板引擎。使用 Express,我可以在主文件中配置 EJS,如下所示:
app.set("view engine", "ejs");
Run Code Online (Sandbox Code Playgroud)
我怎样才能最好地用 NestJS 实现这个?Nestjs 不附带.set方法。
我正在使用Nodejs和ExpressJS.
我有一个HTML页面,其中有一个Javascript文件被引用.
<script type="text/javascript" src="../javascripts/game.js"></script>
Run Code Online (Sandbox Code Playgroud)
我没有将所有Javascript嵌入HTML页面本身,因为它太大了.
现在我需要我的Javascript(game.js)来访问控制器传递的一些变量.我想做这样的事情 -
var max_players = parseInt("<%= table.total_players %>");
console.log("<%= table.name %>")
Run Code Online (Sandbox Code Playgroud)
我在渲染页面时传递表变量.
exports.index = function(req,res){
//code
res.render('mytable', {table: table });
};
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用,因为JS文件被呈现为静态文件.如果我需要让Javascript可以访问这些变量,我该怎么办?
我在某处读到这可以通过将Game.js重命名为Game.ejs来实现.但是我在哪里放置Game.js文件(以便正确和动态地呈现它?)
如果还有其他方法可以达到这个目的,请告诉我.
我是Sails.js的新手,我正在尝试使用EJS的视图助手(目前主要用于link_to).我已经看到它没有开箱即用的引用,但我还没有看到任何关于如何配置Sails.js以使用视图助手的noob-friendy描述.目前,我已经生成了一个完全简单的应用程序,sails new <name>而不是其他.
谢谢!
我试图使用ejs将消息对象传递给模板.我的路线代码如下:
app.get('/', function(req, res) {
res.render('index.ejs', {message: 'A message'});
});
Run Code Online (Sandbox Code Playgroud)
在我的ejs(index.ejs)文件中,我有:
<% if (message) { %>
<div class="alert alert-danger"><%= message %></div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
但是当我根本不传递一个对象(不仅仅是message: "")时,它返回以下错误:
ReferenceError: /Users/Documents/node/views/index.ejs:13
11| <body>
12| <div class="container">
>> 13| <% if (message) { %>
14| <div class="alert alert-danger"><%= message %></div>
15| <% } %>
16| <div class="jumbotron text-center">
message is not defined
Run Code Online (Sandbox Code Playgroud)
同样,如果我尝试,if(message.length > 0)但只是给了我同样的错误.我认为if声明的重点是if message不存在,它只是跳过.如果没有传递消息对象,我怎么能只让ejs渲染,或者message每次都必须传递一个空的obect?
我可以设置process.env.production到true或将其转换为"true"?
即必须在Heroku中配置vars总是字符串,或者它们可以是布尔值吗?
另外:如果if/else我index.ejs执行的条件process.env.production被设置为true,是否会在渲染之前进行评估?
我使用带有Express和EJS的Node.js,我希望将字符串中的html标签传递给浏览器,如下所示:
listRequests.forEach(function(key) {
messages.push("You have a message from <b>" + key.username + "</b>");
});
Run Code Online (Sandbox Code Playgroud)
稍后在我的代码中:
res.render('/wallets', {
messages : messages,
...
});
Run Code Online (Sandbox Code Playgroud)
在我的html模板中,我有类似的东西
<h2>Messages</h2>
<% messages.forEach(function(message) { %>
<p><%= message %></p>
<% }); %>
Run Code Online (Sandbox Code Playgroud)
问题是:浏览器显示带有标签的文本,<b>John</b>而不是John
我正在使用带有Node.js的500px API模块,我正在尝试获取特定用户的照片.我面临功能,回调和范围的问题......我有这段代码:
api500px.photos.getByUsername ('username', {'sort': 'created_at', 'image_size': '3'}, function(error, results) {
if (error) {
console.log(error);
return;
}
var dataPx = results.photos;
});
我想把我的变量拿出来dataPx并在我的ejs模板中使用它:
app.get('/materialize', function(req, res) {
res.render('materialize.ejs', {dataPx: dataPx});
});
如果有人能解释我如何做到这一点以及这种事情在JavaScript中是如何工作的那就太酷了!
谢谢
这可能是一个我不理解的基本概念,但在我的NodeJS应用程序中,我试图定义一个自定义路由.
我的目录结构如下
/application
/app.js
/package.json
/node_modules
/public
/routes
/control
/users.js
/views
/control
/users.ejs
Run Code Online (Sandbox Code Playgroud)
我很满意,因为我希望将路线和观点保持在1比1的关系中,因为我最终会得到像这样的东西
/application
/app.js
/package.json
/node_modules
/public
/routes
/control
/users.js
/system.js
/tools
/stock.js
/report.js
/views
/control
/users.ejs
/system.ejs
/tools
/stock.ejs
/report.ejs
Run Code Online (Sandbox Code Playgroud)
所以我不希望最终得到一个带有大量路由代码的/routes/index.js文件.
它似乎工作,而我的app.js文件如下
//==============================================================================
// setup
//==============================================================================
var express = require("express");
var path = require("path");
var app = express();
var port = 3000;
var message = null;
app.set("view engine", "ejs");
app.use(express.static(path.join(__dirname, "public")));
//==============================================================================
// routes
//==============================================================================
var users = require("./routes/control/users");
app.get("/", users.users);
//==============================================================================
// start server
//==============================================================================
app.listen(port, …Run Code Online (Sandbox Code Playgroud) 我有以下快递应用程序,它只是呈现sample.ejs页面.在该页面上,当我按下按钮时,附加的脚本将div文本更改为"这是来自J QUERY.我希望同样的事情发生但我希望数据来自数据库.在我的快递应用程序中,如果我尝试使用res.render();每次我点击按钮然后重新加载我不想要的页面.那么有没有办法实现这一点而不重新加载页面只更新页面的一部分?我搜索了堆栈溢出和网络,但无法得到一个合适的答案,或者我可能无法理解.我知道这是一个非常基本的问题.
APP.js
var express = require('express');
var app = express();
app.use(express.static('public'));
app.use(express.static('./src/views'));
app.set('views', './src/views');
app.set('view engine' , 'ejs');
app.listen(3000 , (err)=>{console.log('Listening')});
app.get('/' , function(req , res) {
res.render('sample' , {result_from_database: res.body} );
});
Run Code Online (Sandbox Code Playgroud)
sample.ejs
<!doctype html>
<html lang="en">
<head>
<title>Sample HTML File</title>
</head>
<body>
<div id="holder">
WELCOME
</div>
<form>
<button type="button" id="HButton"> HELLO </button>
</form>
</body>
<script>
$(document).ready(function () {
var form = $("#holder");
$("#HButton").on("click", function () {
form.html("THIS IS FROM J QUERY");
});
}); …Run Code Online (Sandbox Code Playgroud)