我正在尝试使用服务器端的ejs创建我的Web应用程序的非JavaScript版本.我将包含应用程序状态的对象传递给模板,并且有时我想使用该状态对象构建一个URL.所以基本上我想做像<%= makeUrl(objectState.data [0])%>这样的事情
如何从ejs模板中调用makeUrl?
谢谢
编辑:我知道我可以将函数作为参数传递给模板,但是有更好的方法吗?
所以我想将ejs模板预编译成.js文件
var compiled = ejs.compile(source);
fs.writeFileSync(target, 'myTemplateFunction = ' + compiled);
Run Code Online (Sandbox Code Playgroud)
但是这可以成为
function (locals){
return fn.call(this, locals, filters, utils.escape);
}
Run Code Online (Sandbox Code Playgroud)
什么是预编译和编写ejs模板到.js文件的最佳方法
我只是想在我的Sails-Project中的视图中添加图像
我的视图文件有位置
views/album/albums.ejs
Run Code Online (Sandbox Code Playgroud)
并且图像位于
assets/images/placeholder.png
Run Code Online (Sandbox Code Playgroud)
如果我添加这样的图像
<img src="../../assets/images/placeholder.png">
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
GET http://localhost:1337/assets/images/placeholder.png 404 (Not Found)
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
在使用Parse.com的Express.js时,如何在我的视图文件而不是.ejs上使用.html扩展名?
我将EJS分隔符更改为<?,?>因为我已经习惯了PHP.这工作正常,但我似乎无法更改我的视图文件的文件扩展名:
我尝试过以下方法:
var express = require('express');
var ejs = require('ejs');
var app = express();
ejs.open = '<?';
ejs.close = '?>';
app.set('view engine', 'ejs');
app.engine('.html', ejs.renderFile);
app.set('views', 'cloud/views'); app.use(express.bodyParser());
app.get('/', function(req, res) {
res.render('Test', { message: 'Hello Express!' });
});
app.listen();
Run Code Online (Sandbox Code Playgroud)
我收到内部服务器错误.
我也尝试用相同的结果消除这一行:
app.set('view engine', 'ejs');
我使用Express和EJS来构建一个站点,我有一个目录结构,如:
+--www/
|
+--partials/
| |
| +--header.ejs
| +--(a bunch of ejs files)
|
+--guide
| |
| +--index.html
| +--(other files)
|
+--index.html
Run Code Online (Sandbox Code Playgroud)
在index.html我的示例中显示的两个文件中<% include ... %>,即使引用相同的包含文件,命令也会不同.
此外,如果我说include header.ejs,然后header.ejs有另一个部分包含,整个系统崩溃,因为他们都在不同位置寻找文件.
为了简化管理,我试图找到一个字符串,以便能够引用相同的包含文件,而不管文件可能位于哪个子目录中.
理想情况下,<% include /partials/header.ejs %>完美的东西.但这不起作用.
有没有人有任何可以在这里得到预期结果的技巧或建议?
我已经将应用程序从webpack-i18n用于翻译升级为使用i18next(13.1.5)。在大多数情况下,一切正常,但是在一个特定页面上,我的ejs文件之一中的文本均未加载。在特定情况下,js该页面的文件会进行一些调用i18next.t,如果我触发了它们,则将成功检索并显示这些字符串的文本。该ejs文件似乎仍在处理中,因为结构和图像都正确。
我找不到任何可以解释正在发生的错误,并且不确定i18next在此页面上如何查找正在发生的情况。我有debug: truefor i18next,可以在浏览器控制台中看到整个配置。这包括资源,以及翻译键/值对的完整列表。因此,似乎i18next正在查找所有字符串并加载它们。但是在这个ejs文件中对它们的任何引用都没有。
我们只有en翻译,在i18next配置中,lng和fallbackLng均为en。因此,我认为该应用程序认为该模板文件可能不需要使用其他语言,并且正在寻找一种不存在的替代翻译。我想这也会以某种方式提示它出错。
控制台中没有错误。那么,我如何才能找到有关i18next这种情况下正在发生的事情的更多信息?我无法确定它是否真的在ejs文件中命中并评估了这些调用,并认为这null是正确的响应,或者是否以某种方式根本不评估这些字符串中的任何一个,还是在实际中遇到了某种错误,并且错误只是没有达到我。
由于其他页面可以正常工作,甚至js这个页面的文件中的字符串都可以正常工作,这更加令人困惑。在无法ejs正常工作的文件和无法正常工作的文件之间,我找不到任何不同之处。一个或多个引用的字符串出现问题似乎不太可能导致文件中的所有字符串失败,尤其是如果它默默地失败了。有什么想法吗?我是i18nextJava的新手,对Java的了解也不是很好,所以我不知如何进一步调试。
在HtmlWebpackPlugin中,<%-表示输出转义而<%=表示输出未转义。在EJS中,情况恰恰相反。是否可以将它们交换为HtmlWebpackPlugin或EJS?
我是 NodeJS 和 Express 的新手(一般来说,对于编码)。我正在尝试将数据呈现到 EJS 视图页面,以便我可以在前端对其进行操作。它看起来像这样:
app.set('view engine','ejs');
var str = JSON.parse('[{"name":"bill", "age":"26"}, {"name":"jeff", "age":"32"}]');
str.forEach(function(data){
console.log(data.name);
});
app.get('/data', function(req, res){
res.render('data', {str:str});
});
Run Code Online (Sandbox Code Playgroud)
我尝试在 EJS 文件中测试它,方法是输入<%= data %>我在浏览器中得到的输出:[object Object],[object Object]。我感觉自己少了几块。有人可以帮我吗?
谢谢
编辑:谢谢布利古什。只是想补充一点,之后我必须在 EJS 端将其转换回 JSON 才能使其正常工作。:)
我的快速应用程序(app.js 文件)中有以下代码:
const express = require("express");
const app = express();
app.set('view engine', 'ejs');
app.get('/', function(req, res) {
res.render('index');
});
app.listen(8080);
Run Code Online (Sandbox Code Playgroud)
以及以下依赖项:
"ejs": "^2.6.1",
"express": "^4.16.3",
"request": "^2.87.0"
Run Code Online (Sandbox Code Playgroud)
这是我的文件夹结构:
myapp
app.js
package.json
views
index.ejs
node_modules
[all node files]
Run Code Online (Sandbox Code Playgroud)
但是当我运行应用程序时,它显示了这个错误:
Failed to lookup view "index.ejs" in views directory "mylocaldirectory/myapp/views"
Run Code Online (Sandbox Code Playgroud)
如果它有帮助,这里是其他错误消息:
at Function.render (/mylocaldirectory/myapp/node_modules/express/lib/application.js:580:17)
at ServerResponse.render (/mylocaldirectory/myapp/node_modules/express/lib/response.js:1008:7)
at //mylocaldirectory/myapp/app.js:11:9
at Layer.handle [as handle_request] (/mylocaldirectory/myapp/node_modules/express/lib/router/layer.js:95:5)
at next (/mylocaldirectory/myapp/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/mylocaldirectory/myapp/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/mylocaldirectory/myapp/node_modules/express/lib/router/layer.js:95:5)
at /mylocaldirectory/myapp/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/mylocaldirectory/myapp/node_modules/express/lib/router/index.js:335:12)
at next (/mylocaldirectory/myapp/node_modules/express/lib/router/index.js:275:10) …Run Code Online (Sandbox Code Playgroud) 在 Windows 中运行该应用程序时,我遇到了以下错误。
SyntaxError: Unexpected identifier in \path\views\landing.ejs while compiling ejs
If the above error is not helpful, you may want to try EJS-Lint:
https://github.com/RyanZim/EJS-Lint
Or, if you meant to create an async function, pass `async: true` as an option.
at new Function (<anonymous>)
at Template.compile (\path\node_modules\ejs\lib\ejs.js:626:12)
at Object.compile (\path\node_modules\ejs\lib\ejs.js:366:16)
at handleCache (\path\node_modules\ejs\lib\ejs.js:215:18)
at tryHandleCache (\path\node_modules\ejs\lib\ejs.js:254:16)
at View.exports.renderFile [as engine] (\path\node_modules\ejs\lib\ejs.js:459:10)
at View.render (\path\node_modules\express\lib\view.js:135:8)
at tryRender (\path\node_modules\express\lib\application.js:640:10)
at Function.render (\path\node_modules\express\lib\application.js:592:3)
at ServerResponse.render (\path\node_modules\express\lib\response.js:1012:7)
Run Code Online (Sandbox Code Playgroud)
这是我的代码片段:
<% include partials/header %>
<h1>Landing Page</h1> …Run Code Online (Sandbox Code Playgroud)