Skip to content

Instantly share code, notes, and snippets.

@intech
Last active December 21, 2015 05:39
Show Gist options
  • Save intech/6258855 to your computer and use it in GitHub Desktop.
Save intech/6258855 to your computer and use it in GitHub Desktop.
Example
var express = require('express'),
// стандартные либы
http = require('http'),
path = require('path'),
// подключаем mongodb
MongoClient = require('mongodb').MongoClient,
// ObjectID
ObjectID = require('mongodb').ObjectID;
// Подключаемся к БД
MongoClient.connect('mongodb://127.0.0.1:27017/examples', function(err, db) {
if(err) throw err;
// Берём коллекцию users в перменную для удобства обращения с ней
var Users = db.collection('users');
// создаём экземпляр класса express
var app = express();
// задаём переменную с портом на который биндить сервер
app.set('port', 3010);
// путь до папки с шаблонами
app.set('views', __dirname + '/views');
// шаблонизатор
app.set('view engine', 'ejs');
// стандартный favicon
app.use(express.favicon());
// логирование информации в консоль
app.use(express.logger('dev'));
// парсинг post запросов и загружаемых файлов
app.use(express.bodyParser());
// стандартные роуты expressjs
app.use(app.router);
//app.use(express.errorHandler()); // режим отладки
// главная страница
app.get('/', function(req, res){
res.render('index', { title: 'Демка' });
});
// вывод списка пользователей
app.get('/users', function(req, res, next) {
// выводим список пользователей и сортируем по имени
// преобразуем в массив для работы с объектами
Users.find({}).sort(['name','asc']).toArray(function(err, objects) {
// проверка на ошибки
if(err) return next(err);
// рендерим шаблон и передаём в него для вывода массив пользователей
res.render('users/list', { title: 'Список пользователей', users: objects });
});
});
// добавление пользователя
app.get('/users/new', function(req, res, next) {
// рендерим шаблон
res.render('users/add', {
title: 'Добавление пользователя'
});
});
// редактирование пользователя
app.get('/users/edit/:id', function(req, res, next) {
// В коллекции users ищем элемент по свойству документа _id полученого из url параметра с ObjectID
Users.findOne({ _id: new ObjectID(req.param('id')) }, function(err, doc) {
// если переменная err не null, значит бросаем исключение с ошибкой
if(err) return next(err);
if(doc == null) return next(new Error('Пользователь не найден'));
// всё ок, рендерим шаблон и передаём туда документ пользователя
res.render('users/edit', {
title: 'Редактирование пользователя ID#' + doc._id,
// doc - документ с найденым пользователям (будет пустой, значит такого пользователя нет)
user : doc
});
});
});
// сохранение пользователя
app.post('/users/save', function(req, res, next) {
// save позволяет не только создавать, но и редактировать записи, если _id уже будет в коллекции
Users.save({ _id: new ObjectID(req.param('id')), name: req.param('name') }, function(err, objects) {
if(err) return next(err);
res.redirect('/users');
});
});
// удаление пользователя
app.post('/users/remove', function(req, res, next) {
// удаление документа по _id
Users.remove({ _id: new ObjectID(req.param('id')) }, function(err, objects) {
if(err) return next(err);
res.redirect('/users');
});
});
// создаём сервер и биндим его на указанный из переменной port
http.createServer(app).listen(app.get('port'), function() {
console.log('Express server listening on port ' + app.get('port'));
});
});
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "latest",
"ejs": "latest",
"mongodb": "latest"
}
}
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<p>Это тестовое приложения для работы с nodejs, expressjs и mongodb</p>
<p>
<a href="/users">Список пользователей</a>
</p>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h1><%= title %></h1>
<p>
<a href="/users">Список пользователей</a>
</p>
<p>
<form action="/users/save" method="POST">
<label>Имя:</label><input type="text" name="name" value="">
<button>Сохранить</button>
</form>
</p>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h1><%= title %></h1>
<p>
<a href="/users">Список пользователей</a>
</p>
<p>
<form action="/users/save" method="POST">
<input type="hidden" name="id" value="<%- (user._id || '') %>">
<label>Имя:</label><input type="text" name="name" value="<%- (user.name || '') %>">
<button>Сохранить</button>
</form>
</p>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h1><%= title %></h1>
<p>
<a href="/users">Список пользователей</a>
</p>
<p>
<table border="1" width="600">
<thead>
<tr>
<th>ID</th>
<th>Имя</th>
<th>&nbsp;</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="3" align="right"><strong>Всего: <%- users.length %></strong> (<a href="/users/new">Создать нового</a>)</td>
</tr>
</tfoot>
<tbody>
<% users.forEach(function(user) { %>
<tr>
<td><a href="/users/edit/<%- user._id %>"><%- user._id %></a></td>
<td><a href="/users/edit/<%- user._id %>"><%- user.name %></a></td>
<td><form action="/users/remove" method="POST"><input type="hidden" name="id" value="<%- user._id %>"><button>Удалить</button></form></td>
</tr>
<% }); %>
</tbody>
</table>
</p>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment