- PVSM.RU - https://www.pvsm.ru -
Проблематика: Есть сервер с СУБД, например MySQL. Для управления данными в таблицах необходимо реализовать полный RestFull API интерфейс на nodeJS для каждой таблицы:
Очень много рутины и кода.
Задача: Написать универсальный обработчик запросов, который может обрабатывать данные любых таблиц в базе данных. Типы обрабатываемых данных — строка, текст, целое число, дробное число, дата, дата и время, булево.
Решение: Все указанные типы в JS конвертируются через строку. Шаблон единого Post запроса будет иметь вид — /table/: Имя таблицы/action/: Тип запроса.
Тип запроса — POST,PUT,GET,DELETE.
///////base set//////////////////////////////
var http = require("http");
var fs = require('fs');
var util = require('util');
var url = require('url');
var port = 3000;
var mysql = require('mysql');
var express = require('express');
var app = express();
/////////////////////////////////////////////////////
var con = mysql.createConnection({
host: '192.168.0.18',
user: 'remote',
password: 'remote',
database: "tss"
});
app.use(express.json()); // to support JSON-encoded bodies
app.use(express.urlencoded()); // to support URL-encoded bodies
con.connect(function (err) {
if (err)
throw err;
console.log("Connected to MySql database!");
});
app.listen(3000, function () {
console.log('Start : localhost:3000');
});
/////////////universal api//////////////////////////////////
app.post('/table/:tableName/action/:action', function (req, res) {
var tableName = req.params.tableName;
var action = req.params.action;
if (action === 'post') {
sqlStr = "INSERT INTO " + tableName + " (";
for (i = 0; i < Object.keys(req.body).length; i++) {
sqlStr = sqlStr + Object.keys(req.body)[i] + ",";
}
sqlStr = sqlStr.substring(0, sqlStr.length - 1);
sqlStr = sqlStr + ") VALUES (";
for (i = 0; i < Object.keys(req.body).length; i++) {
sqlStr = sqlStr + "'" + req.body[Object.keys(req.body)[i]] + "',";
}
sqlStr = sqlStr.substring(0, sqlStr.length - 1);
sqlStr = sqlStr + ")";
con.query(sqlStr, function (err, result) {
if (err)
res.end(JSON.stringify(err));
res.end(JSON.stringify(result));
});
}
if (action === 'put') {
var id = req.body.id;
sqlStr = "update " + tableName + " set ";
for (i = 0; i < Object.keys(req.body).length; i++) {
if (Object.keys(req.body)[i] === 'id') {
continue;
}
sqlStr = sqlStr + Object.keys(req.body)[i] + "='" + req.body[Object.keys(req.body)[i]] + "',"
}
sqlStr = sqlStr.substring(0, sqlStr.length - 1);
sqlStr = sqlStr + "where id = " + id;
con.query(sqlStr, function (err, result) {
if (err)
res.end(JSON.stringify(err));
res.end(JSON.stringify(result));
});
}
if (action === 'delete') {
var id = req.body.id;
sqlStr = "delete from " + tableName + " where id = "+id;
con.query(sqlStr, function (err, result) {
if (err)
res.end(JSON.stringify(err));
res.end(JSON.stringify(result));
});
}
if (action === 'get') {
var id = req.body.id;
if(id){
sqlStr = "select * from " + tableName + " where id = "+id;
}
else{
sqlStr = "select * from " + tableName;
}
con.query(sqlStr, function (err, result) {
if (err)
res.end(JSON.stringify(err));
res.end(JSON.stringify(result));
});
}
});
//////////////////////////////////////////////
Краткая инструкция:
Автор: Пупсень и Вупсень
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/295180
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/sandbox/124197/
Нажмите здесь для печати.