如何解决如何在EJS模板中使用包?
我正在尝试在EJS模板中使用timeago.js。我试图像这样导出库:
src / lib / lib.js
const timeago = require('timeago.js');
exports.index = function(req,res){
res.render('links/list',{timeago: timeago});
}
路线为: route / links.js
router.get('/',(req,res)=>{
sequelize.query('SELECT * FROM links',{
type: sequelize.QueryTypes.SELECT
}).then((links)=>{
res.render('links/list',{links: links});
});
});
EJS模板是: 视图/链接/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模板中使用?如果我在routes文件中需要该库,并通过一个对象将其发送到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});
编辑:
使用注释中指定的文件路径的更完整的示例:
routes / links.js:
var express = require('express')
var router = express.Router();
const lib = require("../src/lib/lib");
router.get('/',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 });
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。