Статьи

Подробнее о моем проекте JavaScriptCookbook Node

За последние пару дней я добился большего прогресса в проекте 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" <raymondcamden@gmail.com>',
	
		// 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. Я определенно ищу некоторые материалы сейчас и хотел бы, чтобы кто-то сделал иконку, если они чувствуют такую ​​склонность. 😉