2016-12-04 13 views
1

У меня есть массив данных, который я хочу отправить в таблице, используя NodeMailer который выглядит примерно так:Анализ массива данных и отправка с помощью nodemailer?

var results = [ { 
    asin: 'B01571L1Z4', 
    url: 'domain.com', 
    favourite: false, 
    createdAt: 2016-11-18T19:08:41.662Z, 
    updatedAt: 2016-11-18T19:08:41.662Z, 
    id: '582f51b94581a7f21a884f40' 
    }, 
    { 
    asin: 'B01IM0K0R2', 
    url: 'domain2.com', 
    favourite: false, 
    createdAt: 2016-11-16T17:56:21.696Z, 
    updatedAt: 2016-11-16T17:56:21.696Z, 
    id: 'B01IM0K0R2' 
    }] 

То, что я пытаюсь сделать я, чтобы создать цикл внутри моего HTML, а затем через петлю данные. Я попробовал нижеследующее, но, похоже, существуют ограничения на то, что я могу сделать.

var sendUpdatedMerch = transporter.templateSender({ 
     from: '"Test" <[email protected]>', // sender address 
     subject: 'Test Updates', // Subject line 
     html: '<div><table><thead><tr><th>ASIN</th><th>Url</th><th>Favourite</th><th>createdAt</th></tr></thead><tbody>{{result.forEach((item) => {<tr><td>{{asin}}</a></td><td>{{url}</td><td>{{favourite}}</td><td>{{createdAt}}</td></tr>})}}</tbody></table></div>' // html body 
    }); 

    sendUpdatedMerch({ 
    to: '[email protected]' 
    }, {results}, function(err, info){ 
    if(err){ 
     console.log(err); 
    } else { 
     console.log('Done'); 
    } 
    }) 

Может ли кто-нибудь указать, где я ошибаюсь, и что мне нужно сделать, чтобы исправить мои проблемы.

ответ

1

Кажется, вы пытались использовать results.forEach((item), но вы разместили его внутри котировок 'result.forEach((item)', который является строкой и не будет выполняться вообще.

Возможно, вы использовали этот вид синтаксиса на своей странице, когда использовали механизмы просмотра, такие как jade, swig и т. Д., Которые будут выполнять синтаксический анализ для вас. Но здесь вы должны вызвать их вручную, чтобы разобрать этот синтаксис.

В противном случае вы можете провести синтаксический разбор с помощью функции массива, как показано ниже, где я использовал array.reduce, который удобен и будет хорошо разбираться.

Вы можете попробовать то же самое, чтобы создать content и добавить его в html, как показано ниже.

html: '<div><table><thead><tr><th>ASIN</th><th>Url</th><th>Favourite</th><th>createdAt</th></tr></thead><tbody>' + 
content + '</tbody></table></div>' // html body 

var results = [ { 
 
    asin: 'B01571L1Z4', 
 
    url: 'domain.com', 
 
    favourite: false, 
 
    createdAt: '2016-11-18T19:08:41.662Z', 
 
    updatedAt: '2016-11-18T19:08:41.662Z', 
 
    id: '582f51b94581a7f21a884f40' 
 
    }, 
 
    { 
 
    asin: 'B01IM0K0R2', 
 
    url: 'domain2.com', 
 
    favourite: false, 
 
    createdAt: '2016-11-16T17:56:21.696Z', 
 
    updatedAt: '2016-11-16T17:56:21.696Z', 
 
    id: 'B01IM0K0R2' 
 
    }]; 
 

 
var content = results.reduce(function(a, b) { 
 
    return a + '<tr><td>' + b.asin + '</a></td><td>' + b.url + '</td><td>' + b.favourite + '</td><td>' + b.reatedAt + '</td></tr>'; 
 
}, ''); 
 

 
console.log(content); 
 

 
/* 
 
var sendUpdatedMerch = transporter.templateSender({ 
 
     from: '"Test" <[email protected]>', // sender address 
 
     subject: 'Test Updates', // Subject line 
 
     html: '<div><table><thead><tr><th>ASIN</th><th>Url</th><th>Favourite</th><th>createdAt</th></tr></thead><tbody>' + content + '</tbody></table></div>' // html body 
 
    }); 
 

 

 
    sendUpdatedMerch({ 
 
    to: '[email protected]' 
 
    }, {results}, function(err, info){ 
 
    if(err){ 
 
     console.log(err); 
 
    } else { 
 
     console.log('Done'); 
 
    } 
 
    }) 
 
    
 
    */

+0

Ааа, конечно, я не использую шаблон! Это отлично работает. Благодаря! – K20GH

+0

@ K20GH Отлично :-) – Aruna

 Смежные вопросы

  • Нет связанных вопросов^_^