Добавлен метод Redirect учитывающий масштабирование приложения на разные физические ноды.
Пример сохранения информации из HTML формы в базу данных через серверный javascript. Для редиректа между скриптами и страницами используется метод Redirect.
Адрес примера:
http://76d2841ad8c1c0c6d8d387c198a5d07b.app.hivext.ru/
Установить пример под своим аккаунтом:
http://ide.hivext.ru/?solution=76d28...d387c198a5d07b
После установки примера будет доступно следующие содержание
Серверный javascript
------------------------------------------
user/add - получает параметры name, email и сохраняет в базе данных в типе users.
hivext.local.SetHeader("Content-Type", "text/html");
// Получим подпись устройства.
var signature = hivext.local.GetDeviceSignature();
// Формируем объект.
var users = {
name : hivext.local.GetParam("name"),
email : hivext.local.GetParam("email")
}
// Создаем объект в базе данных.
var response = hivext.data.base.CreateObject(appid, signature, "users", users);
// Если произошла ошибка отправляем на failed.html
if(response.result != 0) return hivext.local.Redirect("/failed.html");
// Если ошибки нет отправляем на showusers
return hivext.local.Redirect("/showusers");
templates/showusers - ejs шаблон генерирующий html страницу с таблицей добавленных пользователей.
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h2><%= title %></h2>
<table border="1">
<% for(var i=0; i<users.length; i++) {%>
<tr>
<td><%= users[i].id %></td>
<td><%= users[i].name %></td>
<td><%= users[i].email %></td>
</tr>
<% } %>
</table>
<a href="index.html">Back</a>
</body>
</html>
showusers - скрипт вызывающий шаблон templates/showusers и передающий ему данные из таблицы users.
//////////////////////////////////////////////////
// Пример работы с шаблоном templates/showusers.
//////////////////////////////////////////////////
// Укажем ноде что данные отдаются в html формате.
hivext.local.SetHeader("Content-Type", "text/html");
// Получим подпись устройства.
var signature = hivext.local.GetDeviceSignature();
// Запрашиваем объекты users из базы данных.
var users = hivext.data.base.GetObjects(appid, signature, "users");
if(users.result == 0) { // Если запрос прошел без ошибок, продолжаем.
// Вызов шаблона template/showusers и передача данных.
var template = hivext.development.scripting.eval(appid, signature, "templates/showusers", {
title : "Show users",
users : users.objects
});
if(template.result == 0) return template.response;
else return template.error;
}
return users.error;
Модель данных
------------------------------------------
users - содержит поля id, name, email. В типе users хранятся добавляемые объекты.
Ресурсы
------------------------------------------
public_html/index.html - страница с формой, при успешном сохранении данных редирект на скрипт showusers, если ошибка на failed.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<meta http-equiv="Cache-Control" content="no-cache, no-store, max-age=0, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="Fri, 01 Jan 1990 00:00:00 GMT" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="all" />
<title>HTML Form Example</title>
<body>
<b>Add new customer</b>
<form method="post" action="user/add">
Name <input name="name" value="Hello World" /><br />
Email <input name="email" value="hello@world.com" /><br />
<input type="submit" value="Add" />
</form>
</body>
</html>
public_html/failed.html - страница с отображением ошибки отравки данных
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<meta http-equiv="Cache-Control" content="no-cache, no-store, max-age=0, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="Fri, 01 Jan 1990 00:00:00 GMT" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="all" />
<title>HTML Form Example</title>
<body>
<h1>Failed!</h1>
<a href="index.html">Try again</a>
</body>
</html>