Skip to content

Commit eac7dfb

Browse files
committed
Change query protocol.
1. GET do not have body, so use GET to implement simple query. 2. Use PUT to implement complex query. 3. Use POST to implement Insert/Update. Signed-off-by: Gao Mingfei <g199209@gmail.com>
1 parent c4788f1 commit eac7dfb

3 files changed

Lines changed: 54 additions & 23 deletions

File tree

app.js

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ function generateWhereClause(condition_group) {
223223
return clause;
224224
}
225225

226-
// Create
226+
// Create & Update
227227
function generateInsertSQL(req) {
228228
let req_json = req.body;
229229
if (!("values" in req_json)) {
@@ -251,22 +251,6 @@ function generateInsertSQL(req) {
251251
return [sql, ""];
252252
}
253253

254-
app.post("/:table", async (req, res) => {
255-
let [sql, err_msg] = generateInsertSQL(req);
256-
if (!sql || sql === "") {
257-
return handleGenerateSQLError(err_msg, req, res);
258-
}
259-
260-
try {
261-
let result = await connection.awaitQuery(sql);
262-
console.log(result);
263-
res.status(200).json(initOkJson(result));
264-
} catch (err) {
265-
handleSQLError(err, res);
266-
}
267-
});
268-
269-
// Update
270254
function generateUpdateSQL(req) {
271255
let req_json = req.body;
272256
if (!("values" in req_json)) {
@@ -303,8 +287,15 @@ function generateUpdateSQL(req) {
303287
return [sql, ""];
304288
}
305289

306-
app.put("/:table", async (req, res) => {
307-
let [sql, err_msg] = generateUpdateSQL(req);
290+
app.post("/:table", async (req, res) => {
291+
let sql, err_msg;
292+
if (req.query.type === "create") {
293+
[sql, err_msg] = generateInsertSQL(req);
294+
} else if (req.query.type === "update") {
295+
[sql, err_msg] = generateUpdateSQL(req);
296+
} else {
297+
return handleGenerateSQLError("req type invalid!", req, res);
298+
}
308299
if (!sql || sql === "") {
309300
return handleGenerateSQLError(err_msg, req, res);
310301
}
@@ -389,7 +380,47 @@ function generateSelectSQL(req) {
389380
return [sql, ""];
390381
}
391382

392-
app.get("/:table", async (req, res) => {
383+
// Simple Query
384+
app.get("/:table", async (req, res) => {
385+
let sql = `SELECT * from ${req.params.table}`;
386+
let condition = "";
387+
for (const [col, val] of Object.entries(req.query)) {
388+
if (condition === "") {
389+
condition += `${col}="${val}"`
390+
} else {
391+
condition += ` AND ${col}="${val}"`
392+
}
393+
}
394+
if (condition !== "") {
395+
sql += ` WHERE ${condition};`;
396+
} else {
397+
sql += ';';
398+
}
399+
console.log(`Generate SQL: ${sql}`);
400+
401+
try {
402+
let result = await connection.awaitQuery(sql);
403+
// console.log(result);
404+
j = {
405+
status: 0,
406+
msg: "Success",
407+
data: {
408+
items: [],
409+
total: result.length
410+
}
411+
};
412+
result.forEach(row => {
413+
j.data.items.push(row);
414+
})
415+
416+
res.status(200).json(j);
417+
} catch (err) {
418+
handleSQLError(err, res);
419+
}
420+
});
421+
422+
// Complex Query
423+
app.put("/:table", async (req, res) => {
393424
let [sql, err_msg] = generateSelectSQL(req);
394425
if (!sql || sql === "") {
395426
return handleGenerateSQLError(err_msg, req, res);

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mysql-rest-proxy",
3-
"version": "1.0.1",
3+
"version": "1.1.0",
44
"description": "",
55
"main": "app.js",
66
"scripts": {

0 commit comments

Comments
 (0)