Что может сделать node.js? Я до сих пор не знаю, какие аспекты он использует довольно широко, и у меня нет шансов вступить в контакт с такими проектами. Только потому, что мне понравилось, я сделал веб -сайт и бэкэнд в свободное время. Я глубоко понял одну истину, которая, если вам нравится технология, вы можете играть с ней, но если вы используете ее в проекте, вы должны потратить некоторое время на решение многих проблем.
Используются методы:
Экспресс + Джейд
SQLite + Squestize
Редис
1. О Джейд
Поддержка включает. Например: включите заголовок.
Поддержка расширяется. Например: Extends ../layout использует макет главной страницы.
Для петли настолько проста.
Кода -копия выглядит следующим образом:
Каждый элемент в пользовательском листе (переменная, передаваемая на фронт сервером пользователя)
трэнд
td #{item.username}
td #{item.telephone}
td #{item.email}
Как добавление:
Кода -копия выглядит следующим образом:
Extends ../admin_layout
добавить голову
Ссылка (rel = 'styleSheet', href = '/styleShips/font-awesome.css')
Скрипт (src = '/javascripts/bootstrap.js')
Script (src = '/javascripts/bootstrap-wysiwyg.js')
Script (src = '/javascripts/jquery.hotkeys.js')
Блокировать содержание
Append разместит все шаги и стили за головой главной страницы.
2. Sequelize Framework для реализации ORM. Поддержите SQLite MySQL MongoDB
Определение модели (статья):
Кода -копия выглядит следующим образом:
var article = sedizize.define ('article', {
заголовок:{
Тип: Sedizize.string,
проверка: {}
},
Содержимое: {type: squeelize.string, validate: {}},
значок: {type: squelize.string, validate: {}},
Iconname: {type: squeelize.string},
секвенирование: {type: secutize.string, validate: {}}
}, {
Classmethods: {
// Классификация статьи
getCountall: function (objfun) {
} // end getCountall
} // end classmethods
});
Article.belongsto (категория);
Article.belongsto (категория); Каждая статья имеет категорию.
Я написал методы, связанные с пейджингем, в то время, когда инициализация Scilezize. Таким образом, будет этот метод (PageOffset, Pagelimit) при определении каждой модели.
Кода -копия выглядит следующим образом:
var secuelize = new Squareelize ('база данных', 'username', 'password', {
// sqlite! сейчас!
диалект: 'sqlite',
// Двигатель хранения для SQLite
// - по умолчанию ': память:'
Хранение: config.sqlitepath,
определять:{
Classmethods: {
PageOffset: function (pagenum) {
if (isnan (pagenum) || pagenum <1) {
Pagenum = 1;
}
return (pagenum - 1) * this.pageLimit ();
},
PageLimit: function () {
возврат 10; // 10 элементов отображаются на страницу
},
TotalPages: function (totalNum) {
var total = parseint ((totalnum + this.pageLimit () - 1) / this.pageLimit ()),
arraytotalpages = [];
для (var i = 1; i <= total; i ++) {
arraytotalpages.push (i);
}
return arraytotalpages;
}
},
Instancemethods: {
}
}
});
использовать:
Кода -копия выглядит следующим образом:
Article.findandcountall ({incluct: [Category], Offset: article.pageoffset (req.query.pagenum), Limit: article.pageLimit ()}). Успех (function (row) {
res.render ('article_list', {
Название: «Управление статьей»,
Articlelist: Row.rows,
Страницы: {
TotalPages: article.totalpages (row.count),
CurrentPage: req.query.pagenum,
маршрутизатор: 'статья'
}
});
});
Сохраните модель:
Кода -копия выглядит следующим образом:
exports.add = function (req, res) {
var form = new Formidable.indomingForm ();
form.uploaddir = path.join (__ dirname, '../files');
form.keepextensions = true;
form.parse (req, function (err, fields, files) {
var // iconpath = files.icon.path,
// index = iconpath.lastindexof ('/') <= 0? iconpath.lastindexof ('//'): iconpath.lastindexof ('/'),
icon = path.basename (files.icon.path), // iconpath.substr (index + 1, iconpath.length - index),
iConname = files.icon.name;
var title = fields.title;
id = fields.articleid;
title = fields.title,
content = fields.content,
mincontent = fields.mincontent,
Sequencing = fields. Sectencing == 0? 0: 1,
категория = fields.category;
Article.sync (); // Создать таблицу, если ее не существует.
Category.find (категория) .success (function (c) {
var article = article.build ({
Название: Название,
Контент: контент,
MinContent: MinContent,
Значок: значок,
Iconname: Iconname,
секвенирование: секвенирование
});
article.save ()
.success (function (a) {
A.SetCategory (C);
return res.redirect ('/admin/article');
});
}); // конечная категория
});
}
path.basename:
Кода -копия выглядит следующим образом:
// iconpath = files.icon.path,
// index = iconpath.lastindexof ('/') <= 0? iconpath.lastindexof ('//'): iconpath.lastindexof ('/'),
icon = <strong> path.basename </strong> (files.icon.path), // iconpath.substr (index + 1, iconpath.length - index),
Получите имя файла, например: /a/b/aa.txt => aa.txt. Сначала я использовал перехват строк, которые также могут быть реализованы, но если операционная система отличается, будут проблемы. Mac использует '/'. Следующее - «//» в окне. Я также обнаружил проблему после завершения развертывания. Позже я узнал, что Path.baseName был заменен напрямую (если вы меньше прочитали документ, вы понесете потерю). У меня хорошее впечатление от node.js, чтобы добавить 1 пункт. :)
3. Redis Caches часто запрашивает и редко меняет данные.
Кода -копия выглядит следующим образом:
getCountall: function (objfun) {
redis.get ('artive_getcountall', function (err, reply) {
if (err) {
console.log (err);
возвращаться;
}
if (ответ === null) {
DB.All ('SELECT COUNT (istrics.categoryId) как count, категории.
redis.set ('artive_getcountall', json.stringify (row));
objfun (ряд);
});
}еще{
objfun (ответ);
}
});
Этот метод определяется в модельном уровне. Поскольку он экспресс, используйте метод MVC для развития как можно большего. Фактически, маршрут реализует функцию слоя контроллера (папку маршрута, которую следует назвать контроллером).