ОШИБКА НЕ ОПРЕДЕЛЕНА в node js - PullRequest
2 голосов
/ 09 апреля 2020

Я пробую простое приложение CRUD для заказа еды с node js, express js и MySQL. когда я пытаюсь создать новый заказ, я получаю сообщение об ошибке. Может кто-нибудь направить меня, потому что я новичок в node js. это мой код.

     var orderdb = {
            ordercreate: (req, res) => {
            var db = require('../db')

            if(error){
                console.log(error)
            } else{
            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]);
            }   
       }  
}

1 Ответ

0 голосов
/ 09 апреля 2020

Проблема связана с тем, что Вы делаете:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...