Добавление данных с автоматически сгенерированными полями с помощью Sequelize. js - PullRequest
0 голосов
/ 08 января 2020

Я хочу создать строку в моей таблице выплат, в которой автоматически создается code при создании.

На моем почтальоне это мой ввод для моего тела:

{
    "partner_id": 1,
    "user_id": 913,
    "earnings": "3348.93",
    "process_by": 21,
    "receipt": "asdasds",
    "message": "",
    "data": "{\"mop\":\"-deposit\"}"
}

и это возвращаемые данные Json:

{
 "created_at": "2020-01-08T02:51:29.711Z",
 "updated_at": "2020-01-08T02:51:29.711Z",
 "id": 7,
 "partner_id": 1,
 "user_id": 913,
 "earnings": "3348.93",
 "process_by": 21,
 "receipt": "asdasds",
 "message": "",
 "data": "{\"mop\":\"-deposit\"}",
 "updatedAt": "2020-01-08T02:51:32.250Z"
}

выводит тело , но за исключением code.

Вот функция createCode в моем PartnerPayoutsRepository. js

createCode(length, code) {
var code = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
  code += characters.charAt(Math.floor(Math.random() * charactersLength));
}

 return code;
}

и это мой пост API :

 router.post('/', isAdmin, validator, async (req, res) => {
 try {
   const data = req.params.code;
   const code = await PartnersPayoutRepository.createCode(data);
   const partner_payout = await PartnersPayoutRepository.create(req.body,code);
   res.json(partner_payout);
 } catch (error) {
   console.log(error);
   res.sendStatus(500);
  }
});

Есть идеи, почему и как с этим бороться? Спасибо.

Ответы [ 2 ]

1 голос
/ 08 января 2020

Вот do c для вставки строки с использованием sequelize https://sequelize.org/master/class/lib/model.js~Model.html#static -method-create , она принимает два аргумента: во-первых, это данные типа объекта, во-вторых, это параметры для вставки, которые также Тип объекта. Ваше создание отправляет код во второй объект.

post_api. js

 router.post('/', isAdmin, validator, async (req, res) => {
 try {
   const data = req.params.code;
   const code = await PartnersPayoutRepository.createCode(data);

   **// add code to the req.body object**
   req.body.code = code

   const partner_payout = await PartnersPayoutRepository.create(req.body);
   res.json(partner_payout);
 } catch (error) {
   console.log(error);
   res.sendStatus(500);
  }
});

0 голосов
/ 11 января 2020

Я решил эту проблему, добавив length к моему post api и восстановив функцию.

router.post('/', addPartnerTransactionRules(), validator, async (req, res) => {
try {
  const length = 8;
  const code = PartnersTransactionRepository.createCode(length,req.body.code);
  const insertData = req.body;
  insertData.code = code;
  insertData.user_id = req.user.id;
  const create_code = await PartnersTransactionRepository.create(insertData);
  res.json(create_code);
} catch (error) {
  console.log(error);
  res.sendStatus(500);
  }
 }
);
...