Skip to content

Instantly share code, notes, and snippets.

@alexbaumgertner
Last active March 24, 2017 15:12
Show Gist options
  • Save alexbaumgertner/c69cbbfb3d144262a2f054edba7dbcd5 to your computer and use it in GitHub Desktop.
Save alexbaumgertner/c69cbbfb3d144262a2f054edba7dbcd5 to your computer and use it in GitHub Desktop.
/* Node+Express+MongoDB(mongoose)
Интернет магазин. Сохраняю заказ (Order) в БД
Одновременно с его сохранением в БД, нужно массив с данными (Order) отправить в 1С по API
post API через AXIOS
не могу сообразить как это сделать одновременно и в БД записать и через API постом отправить
*/
app.post('/api/orders/', (req, res) => {
let cart = req.param.cart;
let order = new Order({ cart });
Promise.all(
[
order.save().exec(),
axios.post('https://c1server.example.com', cart).then(result => result.status)
],
(results) => {
// TODO: сделать откат изменений в mongo, если синхронизация с 1С не удалась, см results
// TODO: сделать откат изменений в 1С, если сохранение в mongo не удалось, см results
req.session.cart = null;
return res.redirect('/');
}
);
});
@TheSirop
Copy link

TheSirop commented Mar 20, 2017

import config from 'config';

import Order from '../models/order';
import Cart from '../models/cart';

const axios = require('axios');

export async function postCheckout(req, res, next) {
  if (!req.session.cart) {
    return res.redirect('/cart');
  }

  let cart;
  let order;
  let post;

  const apiConfig = {
    timeout: 1000,
    headers: { 'Content-Type': 'application/json' },
    auth: {
      username: config.remoteApiLogin,
      password: config.remoteApiPassword,
    },
  };

  try {
    cart = await new Cart(req.session.cart);
  } catch ({ message }) {
    return next({
      status: 500,
      message,
    });
  }

  try {
    order = await new Order({
      user: req.user,
      cart,
    });
  } catch ({ message }) {
    return next({
      status: 500,
      message,
    });
  }

  try {
    await order.save();
  } catch ({ message }) {
    return next({
      status: 500,
      message,
    });
  }

  try {
    post = await Order.findOne({}, {}, { sort: { createdAt: -1 } });
    global.console.log(post);
  } catch ({ message }) {
    return next({
      status: 500,
      message,
    });
  }

  try {
    await axios.post(config.postOrder, post, apiConfig);
  } catch ({ message }) {
    return next({
      status: 500,
      message,
    });
  }

  req.session.cart = null;

  return res.redirect('/user/profile');
}

@alexbaumgertner
Copy link
Author

@redmedian можно попробовать распаралеллить сохранение в Mongo и в 1C

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment