Добрый день!
Пишу с нуля веб сервер, который по результатам post запроса должен выдавать результат на странице.
Для этого поставил nodejs, подключил express, express-generator, и модуль для общения с БД MSSQL, mssql.
Через генератор (
expressjs.com/starter/generator.html) создал макет приложения.
В модели создал файл db.js для обращения к БД и исполнения хранимой процедуры с параметрами.
var sqlDb = require('../node_modules/mssql');
var settings = require('./settings');
exports.selectOubySummBuking = function(mon, tue, wed, thu, fri, sat, sun, buksumm, sql, callback){
var conn = new sqlDb.Connection(settings.dbConfig);
conn.connect()
.then(function(){
var req = new sqlDb.Request(conn);
//req.verbose = true;
req.input('mon', mon);
req.input('tue', tue);
req.input('wed', wed);
req.input('thu', thu);
req.input('fri', fri);
req.input('sat', sat);
req.input('sun', sun);
req.input('buksumm', buksumm);
req.execute(sql)
.then(function(data){
callback(data[0]);
})
.catch(function(err){
console.log(err);
callback(err);
});
})
.catch(function(err){
console.log(err);
callback(err);
});
};
В роутере, в файле index.js описал обработчик post запроса
var express = require('express');
var dbconnect = require('../model/db.js');
var outlets = require('../controller/outlet.js');
var router = express.Router();
// определяем метод который будет обрабатывать обращение
router.post('/oudb', function(req, res){
var allBuking = req.body.allBuking;
dbconnect.selectOubySummBuking(2, 2, 3, 4, 5, 5, 3, allBuking, "selectOubySummBuking", function(data) {
res.render('index', {
title: "Outlet DB",
results: data
});
});
});
module.exports = router;
Результат выводиться через шаблонизатор ejs, код файла index.ejs
<!DOCTYPE html>
<html lang = "ru">
<head>
<meta charset="utf-8">
<title>My app</title>
<link rel="stylesheet" href="bootstrap/dist/css/bootstrap.css">
<script src = "jquery/dist/jquery.js"></script>
<script src = "bootstrap/dist/js/bootstrap.js"></script>
</head>
<body>
<form action="/oudb" method="post">
<input name="allBuking" type="number">
<input type="submit">
</form>
<ul>
<% for(var i=0; i<results.length; i++) {%>
<li><%= results[i].City %></li>
<% } %>
</ul>
</body>
</html>
Если хранимая процедура возвращает некоторое количество строк, то страница корректно отображается. так как в результате ренедринга, мы передали значения в results, но если процедура не вернет результат, как сделать так, чтобы на этой же странице отображалась фраза "результат не найден, измените параметры запроса" ???