【发布时间】:2020-09-29 20:11:15
【问题描述】:
我是 Typescript 和 NodeJS 的新手。
我正在尝试使用带有 typescript 的 mysql 和 nodejs 来解决问题,但我遇到了一些困难。 基本上我的程序要做的是通过 POST 请求接收数据,并使用该数据在数据库中执行两个查询。 更好地解释,这个请求中的数据是用户名和他想在数据库中启动的查询。如果成功(查询正确执行且不包含错误),数据库将在表中成功插入,如果失败,将发生另一个插入,但在同一个表中失败。
我遇到的问题是我想以文本格式向用户返回响应,以防出错或成功。但我不确定如何将其返回给用户。
我的请求代码调用执行接收到的查询(字符串)并进行必要插入的函数:
import express from 'express';
import mysql from 'mysql';
import cors from 'cors';
import config from './config/db';
import test from './services/test';
// import routes from './routes';
const app = express();
app.use(express.json());
app.use(cors());
app.get('/', (_, res) => {
return res.json({ message: 'Hello World' });
});
app.post('/query', (req, res) => {
const { author, query } = req.body;
try {
if (author && query) {
const connection = mysql.createConnection(config);
const result = test({ author, query }, connection);
console.log('Result endpoint is: ', result);
return res.json(result);
}
return res.status(400).json({ error: 'Parameters wrong' });
} catch (err) {
return res.status(400).json({ error: err.message });
}
});
app.listen(3333, () => {
console.log('???? Server runing');
});
以及执行查询和插入的函数的代码
import mysql from 'mysql';
interface IQuery {
author: string;
query: string;
}
function insertQuery(
{ author, query }: IQuery,
error: number,
conn: mysql.Connection,
): void {
conn.query(
'INSERT INTO query_tracker (name, query, error) VALUES (?, ?, ?)',
[author, query, error],
);
}
function executeQuery(
{ author, query }: IQuery,
conn: mysql.Connection,
): string {
// create connection with DB
console.log('???? DB Connected');
// execute statement from post
conn.query(query, (err, results) => {
if (err) {
insertQuery({ author, query }, 0, conn);
return err.sqlMessage;
// eslint-disable-next-line no-else-return
} else {
insertQuery({ author, query }, 1, conn);
return results.message;
}
});
}
export default executeQuery;
【问题讨论】:
-
你在哪里调用
executeQuery函数? -
@SlavaRozhnev 在我的请求代码中我从服务/测试导入测试,并在此文件中导出函数 executeQuery。
标签: mysql node.js typescript