node.js - 如何在 EJS 模板中使用包?
问题描述
我正在尝试在 EJS 模板中使用 timeago.js。我试图像这样导出库:
src/lib/lib.js
const timeago = require('timeago.js');
exports.index = function(req, res){
res.render('links/list',{timeago: timeago});
}
路线是:routes/links.js
router.get('/', (req, res)=>{
sequelize.query('SELECT * FROM links', {
type: sequelize.QueryTypes.SELECT
}).then((links)=>{
res.render('links/list', {links: links});
});
});
EJS 模板为:views/links/list.ejs
<div class="container p-4">
<div class="row">
<% for(i of links){ %>
<div class="col-md-3">
<div class="card text-center">
<div class="card-body">
<a target="_blank" href="<%= i.url %>">
<h3 class="card-title text-uppercase"><%= i.title %></h3>
</a>
<p class="m-2"><%= i.description %></p>
<h1><%= timeago.format(i.created_at); %></h1>
<a href="" class="btn btn-danger">Delete Link</a>
<a href="" class="btn btn-secondary">Edit</a>
</div>
</div>
</div>
<% } %>
我需要使用 h1 中的库来转换从数据库中获得的时间戳。但是,我总是得到同样的错误:timeago is not defined
.
如何正确导出 Timeago 以在 EJS 模板中使用?如果我需要路由文件中的库并通过对象将其发送到 EJS 模板,则效果很好,但当我从另一个文件中导出它时就不行了。
解决方案
我做了以下测试程序来做一个最小的测试timeago.js
const ejs = require('ejs');
const timeago = require('timeago.js');
let template = `
<% for(i of links){ %>
<h1> <%- i.created_at %>: <%- timeago.format(i.created_at) %> </h1>
<% } %>
`;
const renderData = {
links: [
{
created_at: new Date()
}
],
timeago
};
const output = ejs.render(template, renderData);
console.log(output);
输出:
<h1> Mon Sep 07 2020 00:01:57 GMT-0700 (Pacific Daylight Time): just now </h1>
因此,只要您正确地将 timeago 对象传递到您的渲染数据中,它就会起作用。
问题很可能在这里:
router.get('/', (req, res)=>{
sequelize.query('SELECT * FROM links', {
type: sequelize.QueryTypes.SELECT
}).then((links)=>{
res.render('links/list', {links: links});
});
});
您没有传入 timeago 对象的地方。这一行:
res.render('links/list', {links: links});
应该是:
res.render('links/list', {links: links, timeago});
编辑:
使用注释中指定的文件路径的更完整示例:
路线/链接.js:
var express = require('express')
var router = express.Router();
const lib = require("../src/lib/lib");
router.get('/', (req, res)=>{
lib.index(req, res);
});
module.exports = router;
src/lib/lib.js
const timeago = require('timeago.js');
exports.index = function(req, res) {
const links = [
{
created_at: new Date()
}
];
res.render('links/list',{ timeago, links });
}
推荐阅读
- msmq - Docker Windows 容器内的多播 MSMQ
- javascript - 如何在 konvajs 中翻转旋转的图像
- javascript - 角单例服务
- python - 在 html 行中获取 href
- c - C、预处理器宏和 GCC 错误:"expected expression before..."
- javascript - 如何映射到数组而不是对象
- javascript - 在过滤器上返回两个元素返回 Pandoc-filter
- javascript - 如何同时触发两个不同的 onPress 监听器
- python - 将带有用 Python 编写的参数的库导入 Eclipse 中的 Robot 框架
- javascript - if 和 switch 语句结果显示不正确