За последние пару дней я добился большего прогресса в проекте Node, который я начал. Если вы еще не прочитали первую статью, нажмите на эту предыдущую ссылку для фона. Вот что я смог сделать со времени моего первого поста.
GitHub
Я упоминал об этом в комментариях, но если вы хотите посмотреть и критиковать мой код Node, вы можете сделать это на GitHub:
https://github.com/cfjedimaster/javascriptcookbook . Здесь есть все, кроме файла JSON, который я использовал для хранения аутентификационной информации для админ-панели и моей интеграции с GMail (подробнее об этом через минуту). Как я думаю, что я говорю каждый раз, я все еще Noob / Node / Express, так что я не считаю это хорошим кодом, но сайт пока готов.
Электронное письмо
Я использовал отличный
модуль Nodemailer для настройки поддержки электронной почты для моего приложения. Все, что мне было нужно, — это возможность отправить мне письмо, и это работало нормально. Вот фрагмент кода из моего app.js, показывающий это в действии.
var title = req.param('title'); var body = req.param('body'); var code = req.param('code'); var sourceauthor = req.param('sourceauthor'); var sourceurl = req.param('sourceurl'); var yourname = req.param('yourname'); var youremail = req.param('youremail') var tags = req.param('tags'); var transport = nodemailer.createTransport("SMTP", { service: 'Gmail', // use well known service auth: { user: app.get('mailusername'), pass: app.get('mailpassword') } }); var message = { // sender info from: '"' + yourname +'" <' + youremail +'>', // Comma separated list of recipients to: '"Raymond Camden" <[email protected]>', // Subject of the message subject: 'JavaScript Cookbook Submission', // text: "Title: "+title + "\n" + "Body: "+body + "\n\n" + "Code: "+code + "\n\n" + "Source Author: " + sourceauthor + "\n" + "Source URL: " + sourceurl + "\n" + "Submitter Name: " + yourname + "\n" + "Submitter Email: " + youremail + "\n" }; transport.sendMail(message, function(error){ if(error){ console.log('Error occured'); console.log(error.message); return; } console.log('Message sent successfully!'); // if you don't want to use this transport object anymore, uncomment following line transport.close(); // close the connection pool res.redirect('/submitted'); });
Единственная странность, с которой я столкнулся, заключалась в том, что, хотя я указывал в поле «От» ваше имя и адрес электронной почты, когда он отображается в Gmail, это всегда мой адрес электронной почты. Я предполагаю, что это вещь безопасности GMail. Если кто-то знает лучше, дайте мне знать. Так как я в любом случае включаю адрес электронной почты отправителя, для меня это не нарушает договоренности.
MongoDB
Я говорю тебе, что. Я никогда не хочу писать SQL снова. Это не первый раз, когда я использовал Монго, но мой бог — какое удовольствие. Вот несколько примеров.
//get latest article_collection.find().sort({created_at:-1}).limit(max).toArray(function(error, results) { if( error ) callback(error) else callback(null, results) }); //based on an array property called tags, give me unique ones article_collection.distinct("tags", function(error, result) { if(error) callback(error); else callback(null, result); }); //loose search var reg = new RegExp(term,"i"); article_collection.find({$or:[{title: reg},{body:reg}]}).toArray(function(error, results) { if( error ) callback(error) else callback(null, results) });
Я думаю, что $ или поиск — это тот, который мне нравится больше всего.
шаблонирование
Я ненавижу систему шаблонов Jade, и EJS в порядке, но моя любимая система шаблонов — Handlebars. Модуль
HBS дает мне доступ к этому внутри моих представлений. Я даже могу расширить его с помощью своих собственных служебных функций. Вот один из примеров:
<h3>{{article.title}}</h3> <p> {{article.body}} </p> {{#if article.sourceauthor}} Original Author: {{article.sourceauthor}}<br/> {{/if}} {{#if article.sourceurl}} Original Location: <a href="{{article.sourceurl}}">{{article.sourceurl}}</a><br/> {{/if}} <p/> <pre>{{article.code}}</pre> <p> {{#if article.tags}} <b>Tags:</b> {{#each article.tags}} <a href="/tag/{{urlFormat .}}"><span class="label label-info">{{.}}</span></a> {{/each}} {{/if}} </p>
Комментирование
Да, Дискус . Готово.
Хостинг
Я люблю AppFog . Насколько я люблю AppFog? AppFog это:
Позвольте мне описать, как их процесс был для меня.
- Я подписал.
- Я сделал новое приложение.
- Я нажал около 2 кнопок, чтобы добавить поддержку Mongo.
- Я установил инструмент командной строки через npm.
- Я набрал «af update javascriptcookbook»
Вот и все. Я был сделан. Период. И это сработало! Теперь оказалось, что я должен был изменить одну строку: app.listen (3000) нужно было изменить на app.listen (process.env.VCAP_APP_PORT || 3000). Но даже до того, как я это сделал, это сработало. Черт, мне даже не пришлось настраивать Монго.
Итак, теперь мой процесс — я делаю некоторые изменения — я фиксирую GitHub — я подталкиваю к AppFog. Процесс обновления для AppFog занимает около 20 секунд.
Я так счастлив с ними, что я собираюсь сделать шаг вперед и тратить 20 долларов в месяц. (Хотя я, вероятно, в конечном итоге выложу на сайте объявление Adsense, чтобы помочь заплатить за него.)
Хотите поднять это? Проверьте это здесь: http://javascriptcookbook.aws.af.cm. Я определенно ищу некоторые материалы сейчас и хотел бы, чтобы кто-то сделал иконку, если они чувствуют такую склонность. ?