EJS 排序过滤器不起作用

EJS sort filter doesn't work

非常感谢您帮助我挽救剩下的头发。我正在使用 node.js + express + mongoDB + EJS 构建一个基本的 CRUD 应用程序。我得说,EJS 的文档很糟糕,这让我们新手很难学习它。这是我遇到的问题。

我有一个名为 "vehicles" 的对象,我以 select 元素的形式显示它。这是我的 EJS:

<% vehicles.forEach(function(el){ %>
   <option value="<%= el.vehicleModel %>"><%= el.vehicleModel %></option>
<% }); %> 

问题是,因为它是从 MongoDB 传递的对象中提取的,所以它没有排序。我去谷歌搜索并找到 this nice tutorial。 EJS 有(应该)解决这个问题的过滤器。所以我尝试了以下代码:

<% vehicles.forEach(function(el){ %>
    <option value="<%=: el.vehicleModel | sort %>"><%=: el.vehicleModel | sort %></option>
<% }); %> 

但它抛出以下错误:

对象原型只能是对象或 null

所以我认为我的代码有问题。我用另一个过滤器(小写)修改它并像这样使用它:

<% vehicles.forEach(function(el){ %>
    <option value="<%=: el.vehicleModel | downcase %>"><%=: el.vehicleModel | downcase %></option>
<% }); %> 

并且有效。字符是小写的。那为什么排序过滤器不起作用?

P/S: 我的另一根头发掉了..

排序过滤器将数组作为输入,而不是字符串。像下面这样的东西会起作用:

<%=: vehicles | sort_by:'vehicleModel' | map:'vehicleModel' %>

虽然它可能不会产生您正在寻找的相同结果。在这种情况下,您需要在提交 js 之前进行排序。如果车辆的数据集非常大,我建议在 mongodb 查询中对其进行排序。

希望对您有所帮助。