tutorial node español node.js express ejs momentjs

node.js - node - ejs<%



¿Cómo usar módulos de nodo(como MomentJS) en vistas de EJS? (9)

¿Qué hay de pasar abajo require esta manera:

res.render(''index'', { require: require });

Es posible que deba retocar para mantener la ruta:

res.render(''index'', { require: module => require(module /* here you may insert path correction */) });

Obviamente esto funciona con Node (back-end) solamente.

Para usar MomentJS en views / custom.ejs, ¿cuál es la forma correcta (si la hay)?

  1. Lado del servidor

    rutas / índice, etc., podemos usar fácilmente require(''moment''); etc. y funciona bien

  2. Lado del servidor (vistas EJS)

    views / custome.ejs, algo así como <% var m = require(''moment''); %> <% var m = require(''moment''); %> no funciona

Estoy usando ExpressJS con EJS como motor de plantilla.


El lado del servidor (vistas EJS) que mencionó anteriormente se está ejecutando en el navegador y no en su servidor. No puede usar require porque los navegadores no pueden entenderlo. Necesita importar el momento.js para usarlo

<script src="/js/moment.min.js"></script>


Encontré otra manera de hacer esto, y creo que tiene algunas ventajas.

  • No contamines tu código exportando filtros.
  • Acceda a cualquier método sin la necesidad de exportarlos todos.
  • Mejor uso de ejs (no | pipes).

En su controlador, o view.js haga esto:

var moment = require(''moment''); exports.index = function(req, res) { // send moment to your ejs res.render(''index'', { moment: moment }); }

Ahora puedes usar el momento dentro de tus ejs:

<html> <h1><%= moment().fromNow() %></h1> </html>

No soy un experto en Node, así que si alguien ve algo malo al hacer esto, ¡házmelo saber! :)


Escribí ayudantes para devolver el momento de usar en vistas y diseños de ejs.

./helpers/utils/get-moment.js

const moment = require(''moment''); module.exports = { friendlyName: ''formatMoney'', description: ''format money number.'', inputs: { }, sync: true, exits: { }, fn: function (inputs, exits) { return exits.success(moment); } };

Luego usando:

const moment = sails.helpers.utils.getMoment();


Puede crear la función y adjuntarla a la aplicación. Localizaciones. y usarlo en la plantilla ejs en el lado del servidor.

En tu archivo de rutas lo haces

../routes/page.js

var ejs = require(''ejs'') , moment = require(''moment''); app.locals.fromNow = function(date){ return moment(date).fromNow(); }

../views/page.ejs

<span class="created_at"><%= fromNow(item.created_at) %></span>

Solo recuerda agregar un momento a tu archivo package.json


Una opción más:

De esta forma, está estableciendo la variable de momento en un local disponible para todos los scripts en cualquier página de EJS en su sitio.

En su archivo "index.js" (o "app.js") haga esto: (después de haber configurado su ''aplicación'' con Express)

var moment = require(''moment''); var shortDateFormat = "ddd @ h:mmA"; // this is just an example of storing a date format once so you can change it in one place and have it propagate app.locals.moment = moment; // this makes moment available as a variable in every EJS page app.locals.shortDateFormat = shortDateFormat;

Luego, en su archivo EJS puede referirse a moment (y shortDateFormat) como variables como esta:

<%= moment(Date()).format(shortDateFormat) %>

Tal vez esto es un poco más elegante?


Uso el momento en el lado del servidor con ejs. Escribí una función de filtro de ejs que volverá de Now.

npm install moment

./views/page.ejs

<span class="created_at"><%=: item.created_at | fromNow %></span>

./routes/page.js

var ejs = require(''ejs'') , moment = require(''moment''); ejs.filters.fromNow = function(date){ return moment(date).fromNow() }


también creo que es una buena idea si lo desea, puede agregar un middleware donde puede agregar lo que quiera a la capa de tema, incluyendo usuario, configuración y momento:

// config, user, moment to the theme layer app.use(function (req, res, next) { // grab reference of render var _render = res.render; // override logic res.render = function (view, options, fn) { // extend config and continue with original render options = options || {}; options.config = config; options.moment = moment; if (req.user && req.user.toJSON) { options.user = req.user.toJSON(); } _render.call(this, view, options, fn); } next(); });


var moment = require(''moment''); app.locals.moment = require(''moment'');

Usar en la vista:

<%= moment(myDateValue).fromNow() %>

Ahora puede simplemente usar el momento en sus archivos EJS.