Проблема связана с тем, что Вы делаете:
if (error) {
в области, где такой переменной не существует.
Также я вижу проблемы:
1 ) var db = require('../db');
внутренний обработчик запросов - плохая практика
2) db.query
не имеет обработчика результатов, его следует обрабатывать с помощью обратного вызова, так как это асинхронная c операция
Итак, вот исправить:
const db = require('../db'); // moved outside, cause it should be defined once
var orderdb = {
ordercreate: function (req, res) {
const query = `
INSERT INTO orders
(
order_id, product_id, product_name,
customer_name, product_quantity, price,
address_line1, address_line2, city, district,
status, rest_id, customer_id
)
VALUES
(
?, ?, ?,
?, ?, ?,
?, ?, ?, ?,
?, ?, ?
)`;
db.query(
query,
[
req.body.order_id, req.body.product_id, req.body.product_name,
req.body.customer_name, req.body.product_quantity, req.body.price,
req.body.address_line1, req.body.address_line2, req.body.city, req.body.district,
req.body.status, req.body.rest_id, req.body.customer_id
],
(error, result) => {
if (error) {
return res.status(500).send({message: error.message});
}
res.status(201).send(result);
});
}
}
или использовать INSERT SET ?
, поскольку имена полей и атрибуты req.body
совпадают, пакет mysql подготовит запрос на основе объекта, который вы передадите в качестве второго аргумента:
const db = require('../db'); // moved outside, cause it should be defined once
const orderdb = {
ordercreate: function (req, res) {
db.query(
'INSERT INTO orders SET ?',
req.body,
(error, result) => {
if (error) {
return res.status(500).send({message: error.message});
}
res.status(201).send(result);
});
}
}
не торопитесь и читайте руководство здесь
PS Попробуйте разделить ваш код на модули для повышения удобства сопровождения.
например
создать папку controllers
и поместить ее как controllers/Orders.js
файл:
class OrdersController {
constructor(components) {
this._components = components || {};
}
get db() {
return this._components.db;
}
create(req, res) {
db.query(
'INSERT INTO orders SET ?',
req.body,
(error, result) => {
if (error) {
return res.status(500).send({message: error.message});
}
res.status(201).send(result);
});
}
}
const db = require('../db');
module.exports = new OrdersController({db});
и в маршрутизатор:
const OrdersController = require('./controllers/Orders');
router.post(
'/orders',
/* add validation or other middlewares */
// here
OrdersController.create);