Соедините интерфейс и бэкэнд (CRUD - с помощью fileUpload) - PullRequest
0 голосов
/ 22 апреля 2019

Пожалуйста, помогите мне ... Я делаю какую-то программу (CRUD).

Я использую API отдыха.Итак, я создаю Backend & front end.Но у меня есть проблема.когда я тестирую бэкэнд с почтальоном, все хорошо (могу сохранить данные в базе данных PostgreSQL).

когда я пытаюсь отправить данные с помощью внешнего интерфейса, я не могу отправить данные.особенно у меня проблема при отправке данных с загрузкой файла ... может помочь мне, пожалуйста

Код внешнего интерфейса

<form id="add-form" class="form-horizontal">
    <div class="form-group">
      <label for="inputProduct" class="col-sm-2 control-label"> Product Name </label>
      <div class="col-md-10">
        <input type="text" class="form-control" id="inputProduct" name="productName" placeholder="Product Name">
      </div>
    </div>

    <div class="form-group">
      <label for="inputProductDesc" class="col-sm-2 control-label"> Product Description </label>
      <div class="col-md-10">
        <textarea class="form-control" id="inputProductDesc" name="productDesc" placeholder="Product Description"></textarea>
      </div>
    </div>

    <div class="form-group">
      <label for="booleanProduct" class="col-sm-2 control-label"> Product Enable </label>
      <div class="col-md-10">
        <select class="form-control" id="booleanProduct" name="productEnable">
          <option>Chosee the boolean...</option>
          <option>True</option>
          <option>False</option>
        </select>
      </div>
    </div>

    <div class="form-group">
      <label for="userFile" class="col-sm-2 control-label">Image</label>
      <div class="col-md-10">
        <input type="file" class="form-control" id="userFile" name="doc">
      </div>
    </div>

    <div class="form-group">
      <label for="booleanImage" class="col-sm-2 control-label"> Image Enable </label>
      <div class="col-md-10">
        <select class="form-control" id="booleanImage" name="imageEnable">
          <option>Chosee the boolean...</option>
          <option>True</option>
          <option>False</option>
        </select>
      </div>
    </div>

    <div class="form-group">
      <label for="inputCategory" class="col-sm-2 control-label">Category Product</label>
      <div class="col-md-10">
        <input type="text" class="form-control" id="inputCategory" name="categoryName" value="">
      </div>
    </div>

    <div class="form-group">
      <label for="booleanCategory" class="col-sm-2 control-label"> Category Enable </label>
      <div class="col-md-10">
        <select class="form-control" id="booleanCategory" name="categoryEnable">
          <option>Chosee the boolean...</option>
          <option>True</option>
          <option>False</option>
        </select>
      </div>
    </div>

    <br>
    <div class="form-group">
      <div class="col-md-3" align="center">
        <button type="submit" class="btn btn-primary">Add Product</button>
      </div>
    </div>

  </form>
<script>
$(document).ready(function(){
  })

  $('#add-form').submit(function(e){
    e.preventDefault();
    saveData();
  });
function saveData(){

let productName = $('#inputProduct').val()
let productDesc = $('#inputProductDesc').val()
let productEnable = $('#booleanProduct').val()
let doc = $('#userFile').val()
let imageEnable = $('#booleanImage').val()
let categoryName = $('#inputCategory').val()
let categoryEnable = $('#booleanCategory').val()

$.ajax({
  url: 'http://localhost:3000/api/product/',
  method: "POST",
  data: {
    productName: productName,
    productDesc: productDesc,
    productEnable: productEnable,
    doc: fileImage,
    imageEnable: imageEnable,
    categoryName: categoryName,
    categoryEnable: categoryEnable
  }
}).done(() => {
  getData();
})

}

Код бэкенда

    // ADD product
  router.post('/',(req, res) => {
    let data = {
      productName: req.body.productName,
      productDesc: req.body.productDesc,
      productEnable: req.body.productEnable,
      categoryName: req.body.categoryName,
      categoryEnable: req.body.categoryEnable,
      imageEnable : req.body.imageEnable
    }

    // Upload File
    let fileImage = req.files.doc;
    let imageName = `${data.productName}` + '-' + fileImage.name;

    console.log("File Image :", fileImage);
    console.log("Image Name :", imageName);

    fileImage.mv(path.join(__dirname, '../public/upload/') + imageName, function(err) {
      if(err){
        console.log(err);
      }else{
        console.log("Uploaded");
      }
    });

    let sql =
    `INSERT INTO product (name, description, enable) VALUES ('${data.productName}', '${data.productDesc}', '${data.productEnable}') RETURNING *`;
    pool.query(sql, (err, insertProduct) => {
      let sql2 = `INSERT INTO category (category_name, category_enable) VALUES ('${data.categoryName}', '${data.categoryEnable}') RETURNING *`;
      pool.query(sql2, (err, insertCategory) => {
        let sql3 = `INSERT INTO category_product (id_category, id_product) VALUES (${insertCategory.rows[0].category_id}, ${insertProduct.rows[0].id})`;
        pool.query(sql3, (err) => {
          let sql4 = `INSERT INTO image (image_name, image_file, image_enable) VALUES ('${imageName}', '${fileImage.name}', '${data.imageEnable}') RETURNING *`;
          pool.query(sql4, (err, insertImage) => {
            let sql5 = `INSERT INTO product_image (product_id, image_id) VALUES (${insertProduct.rows[0].id}, ${insertImage.rows[0].id})`;
            pool.query(sql5).then(() => {
                // console.log("data :", data.rows[0]);
                res.json({
                  success : true,
                  message : "data has been added",
                  data :{
                    productName : insertProduct.rows[0].name,
                    descriptionProduct : insertProduct.rows[0].description,
                    productCategory : insertCategory.rows[0].category_name,
                    productImage : insertImage.rows[0].image_name
                  }
                })
              }).catch(err => {
                res.json({
                  success: false,
                  message: "adding data has been failed",
                })
              })
          })
        })
      })
    })
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...