The issue is because of You're doing:
if (error) {
in scope where there is no such variable exists.
Also I see issues:
1) var db = require('../db'); inside request handler is bad practice
2) db.query does not have result handler, it should be handled with callback since it's async operation
So here is the fix:
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);
});
}
}
or using INSERT SET ? since field names and req.body attributes are same, mysql package will prepare query based on object that You pass as second argument:
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);
});
}
}
take Your time and read manual here
P.S. Try to make Your code separated as modules for better maintainability.
for example
create controllers folder and put it as
controllers/Orders.js file:
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});
and in router:
const OrdersController = require('./controllers/Orders');
router.post(
'/orders',
/* add validation or other middlewares */
// here
OrdersController.create);