#node.js #mongodb #express #mustache
#node.js #mongodb #выразить #усы
Вопрос:
В настоящее время я работаю на веб-сайте электронной коммерции, и у меня возникли проблемы с отображением отчета на моей странице.
вот мой узел server.js
app.get('/adminReport', function (req,res){
var transaction = []
mongoDb.collection('transactions').find().toArray(function(err,results)
{
transaction =results
//console.log(results);
return res.render('adminReport.html', {
transactions: transaction
});
});
});
вот мой код на HTML
<thead>
<tr>
<th>Transaction ID</th>
<th>Name</th>
<th>UserID</th>
<th>Time Ordered</th>
<th>Job Title</th>
<th>Address</th>
<th>Email Address</th>
<th>Contact Number</th>
<th>Purchase Option(Pick-up or Delivery)</th>
<th>Payment Method</th>
<th>Item Ordered</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{{#transactions}}
<tr>
<td>{{_id}}</td>
<td>{{lastName}}, {{firstName}}</td>
<td>{{userId}}</td>
<td>{{timeOrdered}}</td>
<td>{{jobTitle}}</td>
<td>{{address}} , {{city}}, {{province}}, {{zip}}</td>
<td>{{email}}</td>
<td>{{contactNo}}</td>
<td>{{purchaseOpt}}</td>
<td>{{paymentMethod}}</td>
<td>
<table>
<th>Transaction ID</th>
<th>Item Name</th>
<th>Quantity</th>
<th>Price</th>
<!-- item purchased -->
<tr>
<td>{{cartId}}</td>
<td>{{itemName}}</td>
<td>{{quantity}}</td>
<td>₱{{price}}</td>
</tr>
</table>
</td>
<td>{{status}}</td>
</tr> {{/transactions}}
вот результат в виде chromes-source
<thead>
<tr>
<th>Transaction ID</th>
<th>Name</th>
<th>UserID</th>
<th>Time Ordered</th>
<th>Job Title</th>
<th>Address</th>
<th>Email Address</th>
<th>Contact Number</th>
<th>Purchase Option(Pick-up or Delivery)</th>
<th>Payment Method</th>
<th>Item Ordered</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>5c9711730d8f1c2287f5a439</td>
<td>Jordan, Micheal</td>
<td>12341</td>
<td>Sunday 24 Mar 1:11 PM</td>
<td>Programmer</td>
<td>123 St. Atlanta , Baguio, Kadabra, 1500</td>
<td>micheal@tesing.com</td>
<td>95057435</td>
<td>pickUp</td>
<td>cash</td>
<td>
<table>
<th>Transaction ID</th>
<th>Item Name</th>
<th>Quantity</th>
<th>Price</th>
<!-- item purchased -->
<tr>
<td>5c95cb8f36d0c71f05ddf9de,5c95d4b6d82a782747e929a3</td>
<td>Bag,Shirt</td>
<td>2,1</td>
<td>₱62,20</td>
</tr>
</table>
</td>
<td></td>
</tr>
</tbody>
я хочу разделить сумку и рубашку на разные <td>
.
Я использую MongoDB в качестве своей базы данных, и возможно ли разделить значение, если только определенное поле имеет несколько значений?
firstName: 'Micheal',
lastName: 'Jordan',
kinId: '12341',
country: 'Deployed',
contactNo: '95057435',
email: 'micheal@tesing.com',
jobTitle: 'Programmer',
address: '123 St. Atlanta',
province: 'Kadabra',
city: 'Baguio',
zip: '1500',
purchaseOpt: 'pickUp',
paymentMethod: 'cash',
timeOrdered: 'Sunday 24 Mar 1:11 PM',
cartId: [ '5c95cb8f36d0c71f05ddf9de', '5c95d4b6d82a782747e929a3' ],
itemName: [ 'Bag', 'Shirt' ],
quantity: [ '2', '1' ],
price: [ '62', '20' ] } ]
В этом отношении cartId, ItemName, quantity, price являются единственными полями с несколькими значениями, возможно ли отобразить их отдельно на моей HTML-странице, как сумку и рубашку на разных <td>
.
Комментарии:
1. Над вашей схемой не помешала бы некоторая работа. Вместо того, чтобы иметь разные массивы в документе, у вас должен быть один массив объектов. т.е.
items: [{ _id: '5c95cb8f36d0c71f05ddf9de', name: 'Bag', quantity: 2, price: 62 }, { _id: '5c95d4b6d82a782747e929a3', name: 'Shirt', quantity: 1, price: 20 }]
. В принципе, это упрощает обработку, чем цикл по индексу, и позже вы обнаружите, что не сталкиваетесь с проблемой с многоключевыми индексами в MongoDB, к которой склонен ваш текущий дизайн.2. спасибо за это, Нил, я буду использовать эту идею, большое спасибо
![]()
3. Немного покопавшись, вам в принципе нужно. Либо путем наличия этой структуры в базе данных, либо путем выполнения цикла над массивами в документе в настоящее время, чтобы принудительно привести их к этой форме. По-видимому, в mustache отсутствует какой-либо способ «динамической» ссылки на элемент массива по его индексной позиции. Это означает, что вам нужны ваши данные в такой форме, чтобы обрабатывать их в вашем шаблоне так, как вы хотите. Но в первую очередь имеет смысл просто сохранить его в этой базе данных таким образом. По разным другим причинам, как я уже упоминал.
Ответ №1:
Вы можете перебирать значения itemName
, cartId
и т.д. Таким же образом, как вы перебираете свой массив транзакций.
Итак, вместо:
<td>{{itemName}}</td>
Попробуйте что-то вроде:
{{#itemName}}
<td>{{itemName}}</td>
{{/itemName}}
Смотрите документы mustache в разделе, озаглавленном «Непустые списки».
Комментарии:
1. Основная проблема, как я это видел, заключалась в том, что фактическая проблема заключается в том, как «зациклить» что-то вроде
cartId
, а затем использовать текущий индекс массива , чтобы получить одинаковый соответствующий элемент позиции из каждого из других массивов в «транзакции». AFAIK философия mustache — это «минимальная логика», и, как таковая, такого доступа к динамической переменной не существует. Сначала вам нужно реструктурировать данные. Следовательно, было бы намного лучше просто хранить данные в MongoDB именно так, как вы хотите использовать их в шаблоне. Затем вы просто «зацикливаете» подпункты транзакции внутри шаблона2. jknotek спасибо за помощь, я попробовал это, но результат все тот же, но я получил новые знания о mustache, спасибо
![]()