Мне нужна форма в React для отправки данных в разные компоненты. Вся информация одна и та же, но мне нужно быть в состоянии изменить, куда она идет - PullRequest
0 голосов
/ 22 апреля 2020
  1. Это файл сервера

    const express = require ('express'); const bodyParser = require ('body-parser'); const cookieParser = require ('cook ie -parser') const formidable = require ('express -formidable'); const cloudinary = требовать ('cloudinary');

    const app = express (); const mon goose = require ('mon goose'); const asyn c = require ('asyn c'); require ('dotenv'). config ();

    mon goose .Promise = global.Promise; mon goose .connect (process.env.DATABASE)

    app.use (bodyParser.urlencoded ({extended: true})); app.use (bodyParser json ().); app.use (cookieParser ());

    cloudinary.config ({имя-облака: process.env.CLOUD_NAME, api_key: process.env.CLOUD_API_KEY, api_secret: process.env.CLOUD_API_SECRET})

    const {auth} = require ('./ middleware / auth'); const {admin} = требуется ('./ middleware / admin');

    const {Пользователь} = требуется ('./ models / user'); const {Publisher} = require ('./ models / publisher'); const {Product} = require ('./ models / product'); const {Character} = require ('./ models / character'); const {Payment} = require ('./ models / payment'); const {Site} = require ('./models/site'); const {Shirt} = require ('./models/shirt');

    app.all (' / ', function (req, res, next) {res.header ("Access-Control-Allow- Origin "," * "); res.header (" Access-Control-Allow-Headers "," X-Requested-With ");

    next();
    

    });

    / / Products

    app.post ('/ api / product / shop / back_issues', (req, res) => {

    var order = req.body.order ? req.body.order : "desc";
    var sortBy = req.body.sortBy ? req.body.sortBy : "_id";
    var limit = req.body.limit ? parseInt(req.body.limit) : 100; 
    var skip = parseInt(req.body.skip);
    var findArgs = {};
    
    for(var key in req.body.filters){
        if(req.body.filters[key].length >0 ){
            if(key === 'price'){
                findArgs[key] = {
                    $gte: req.body.filters[key][0],
                    $lte: req.body.filters[key][1]
                }
            }else{
                findArgs[key] = req.body.filters[key]
            }
        }
    }
    
    findArgs['publish'] = true;
    
    
    Product.
    find(findArgs).
    populate('character').
    populate('publisher').
    sort([[sortBy,order]]).
    skip(skip).
    limit(limit). 
    exec((err,articles)=>{
        if(err) return res.status(400).send(err);
        res.status(200).json({
            size: articles.length,
            articles
    
        })
    
    })
    

    })

    app. post ('/ api / product / shop / trades', (req, res) => {

    var order = req.body.order ? req.body.order : "desc";
    var sortBy = req.body.sortBy ? req.body.sortBy : "_id";
    var limit = req.body.limit ? parseInt(req.body.limit) : 100; 
    var skip = parseInt(req.body.skip);
    var findArgs = {};
    
    for(var key in req.body.filters){
        if(req.body.filters[key].length >0 ){
            if(key === 'price'){
                findArgs[key] = {
                    $gte: req.body.filters[key][0],
                    $lte: req.body.filters[key][1]
                }
            }else{
                findArgs[key] = req.body.filters[key]
            }
        }
    }
    
    findArgs['publish'] = true;
    
    
    Product.
    find(findArgs).
    populate('character').
    populate('publisher').
    sort([[sortBy,order]]).
    skip(skip).
    limit(limit). 
    exec((err,articles)=>{
        if(err) return res.status(400).send(err);
        res.status(200).json({
            size: articles.length,
            articles
    
        })
    
    })
    

    })

    app.post ('/ api / product / shop / new_comics ', (req, res) => {

    var order = req.body.order ? req.body.order : "desc";
    var sortBy = req.body.sortBy ? req.body.sortBy : "_id";
    var limit = req.body.limit ? parseInt(req.body.limit) : 100; 
    var skip = parseInt(req.body.skip);
    var findArgs = {};
    
    for(var key in req.body.filters){
        if(req.body.filters[key].length >0 ){
            if(key === 'price'){
                findArgs[key] = {
                    $gte: req.body.filters[key][0],
                    $lte: req.body.filters[key][1]
                }
            }else{
                findArgs[key] = req.body.filters[key]
            }
        }
    }
    
    findArgs['publish'] = true;
    
    
    Product.
    find(findArgs).
    populate('character').
    populate('publisher').
    sort([[sortBy,order]]).
    skip(skip).
    limit(limit). 
    exec((err,articles)=>{
        if(err) return res.status(400).send(err);
        res.status(200).json({
            size: articles.length,
            articles
    
        })
    
    })
    

    })

    // By Sell app.get (' / api / product / article ', (req, res) => {

    var order = req.query.order ? req.query.order : "asc";
    var sortBy = req.query.sortby ? req.query.sortBy : "_id";
    var limit = req.query.limit ? parseInt(req.query.limit) : 100;
    
    Product.find().
    populate('character').
    populate('publisher').
    sort([[sortBy,order]]).
    limit(limit).
    exec((err,articles)=>{
        if(err) return res.status(400).send(err);
        res.send(articles)
    })
    

    })

    app.get ('/ api / product / article_by_id', (req, res) => {var type = req.query.type; var items = req.query.id;

    if(type === "array"){
        var ids = req.query.id.split(',');
        items = [];
        items = ids.map(item=>{
            return mongoose.Types.ObjectId(item)
        })
    }
    
    Product.
    find({ '_id':{$in:items}}).
    populate('character').
    populate('publisher').
    exec((err,docs)=>{
        return res.status(200).send(docs)
    })
    

    });

    app.post ('/ api / product / article', auth, admin, (req, res) = > {const product = new Product (req.body);

    product.save((err,doc)=>{
        if(err) return res.json({success:false,err});
        res.status(200).json({
            success:true,
            article: doc
        })
    })
    

    });

    // Символ app.post ('/ api / product / character', auth, admin , (req, res) => {постоянный символ = новый символ (req.body) );

    character.save((err,doc) => {
        if(err) return res.json({success:false,err});
        res.status(200).json({
            success:true,
            character: doc
        })
    })
    

    });

    app.get ('/ api / product / characters', (req, res) => {Character.find ({}, (err) , символы) => {if (err) return res.status (400) .send (err); res.status (200) .send (символы)})});

    // Издатель app.post ('/ api / product / publisher', auth, admin, (req, res) => { const publisher = new Publisher (req.body);

    publisher.save((err,doc)=>{
        if(err) return res.json({success:false,err});
        res.status(200).json({
            success: true,
            publisher:doc
        })
    })
    

    });

    app.get ('/ api / product / publishers', (req, res) => { Publisher.find ({}, (err, publishers) => {if (err) вернуть res.status (400) .send (err); res.status (200) .send (publishers)})});

    // TShirt app.post ('/ api / product / shirt', auth, admin, (req, res) => {const shirt = новая рубашка (req.body);

    shirt.save((err,doc)=>{
        if(err) return res.json({success:false,err});
        res.status(200).json({
            success: true,
            shirt:doc
        })
    })
    

    });

    app.get ('/ api / product / shirts', (req, res) => {Shirt.find ({}, (err, shirts) => {if (err ) return res.status (400) .send (err); res.status (200) .send (рубашки)})});

    // Пользовательский app.get ('/ api / users / auth ', auth, (req, res) => {res.status (200). json ({isAdmin: req.user.role === 0? false: true, isAuth: true, электронная почта: req.user. адрес электронной почты, имя: req.user.name, фамилия: req.user.lastname, роль: req.user.role, корзина: req.user.cart, история: req.user.history})

    } )

    app.post ('/ ap i / users / register ', (req, res) => {const user = new User (req.body);

    user.save((err,doc)=>{
        if(err) return res.json({success:false,err})
        res.status(200).json({
            success: true,
            userdata: doc
    
        })
    })
    

    });

    app.post (' / api / users / login ', (req, res) => {

    User.findOne({'email':req.body.email}, (err, user)=>{
        if(!user) return res.json({loginSuccess:false,message: "Auth failed, email not found"});
    
        user.comparePassword(req.body.password,(err, isMatch)=>{
            if(!isMatch) return res.json({loginSuccess:false,message:'Wrong password'});
    
            user.generateToken((err,user)=> {
                if(err) return res.status(400).send(err);
                res.cookie('w_auth', user.token).status(200).json({
                    loginSuccess: true
                })
    
            })
        })
    
    })
    

    })

    app.get (' / api / users / logout ', auth, (req, res) => {User.findOneAndUpdate ({_id: req.user._id}, {token: ''}, (err, do c) => {if (err) возвращает res. json ({success ложь, ERR}); вернуть разрешение status (200) .send ({success: true})})})

    app.post ('/ api / users / uploadimage', auth, admin, formidable (), (req, res) = > {cloudinary.uploader.upload (req.files.file.path, (result) => {console.log (result); res.status (200) .send ({public_id: result.public_id, url: result.url })}, {public_id: ${Date.now()}, resource_type: 'auto'})})

    app.get ('/ api / users / removeimage', auth, admin, (req, res) => {let image_id = req.query.public_id;

    cloudinary.uploader.destroy(image_id,(error,result)=>{
        if(error) return res.json({succes:false,error});
        res.status(200).send('ok');
    })
    

    })

    app.post ('/ api / users / addToCart', auth, (req, res) => {

    User.findOne({_id: req.user._id},(err,doc)=>{
        let duplicate = false;
    
        doc.cart.forEach((item)=>{
            if(item.id == req.query.productId){
                  duplicate = true;  
            }
        })
    
        if(duplicate){
            User.findOneAndUpdate(
    
                {_id: req.user._id, "cart.id":mongoose.Types.ObjectId(req.query.productId)},
                {$inc: {"cart.$.quantity":1}},
                {new:true},
                ()=> {
                    if(err) return res.json({success:false,err});
                    res.status(200).json(doc.cart)  
                }
    
    
            )
    
    
            User.findOneAndUpdate(
                {_id: req.user._id, "cart.id":mongoose.Types.ObjectId(req.query.productId)},
                { $inc: { "cart.$.quantity":1 } },
                { new:true },
                ()=>{
                    if(err) return res.json({success:false,err});
                    res.status(200).json(doc.cart)
                }
            )
        } else {
            User.findOneAndUpdate(
                {_id: req.user._id},
                { $push:{ cart:{
                    id: mongoose.Types.ObjectId(req.query.productId),
                    quantity:1,
                    date: Date.now()
                } }},
                { new: true },
                (err,doc)=>{
                    if(err) return res.json({success:false,err});
                    res.status(200).json(doc.cart)
                }
            )
        }
    })
    

    })

    app.get ('/ api / users / removeFromCart', auth, (req, res) => {

    User.findOneAndUpdate(
        {_id: req.user._id},
        {"$pull":
    {"cart": {"id":mongoose.Types.ObjectId(req.query._id)}}
        },
        {new: true},
        (err,doc)=>{
            var cart = doc.cart;
            var array = cart.map(item=>{
                return mongoose.Types.ObjectId(item.id)
            });
    
            Product.
            find({'_id':{$in: array}}).
            populate('character').
            populate('publisher').
            exec((err,cartDetail)=>{
                return res.status(200).json({
                    cartDetail,
                    cart
                })
            })
    
        }
    );
    

    } )

    app.post ('/ api / users / successBuy', auth, (req, res) => {var history = []; varactionData = {}

    req.body.cartDetail.forEach((item)=>{
        history.push({
            dateOfPurchase: Date.now(),
            name: item.name,
            character: item.character.name,
            id: item._id,
            price: item.price,
            quantity: item.quantity,
            paymentId: req.body.paymentData.paymentID
        })
    })
    
    transactionData.user = {
        id: req.user._id,
        name: req.user.name,
        lastname: req.user.lastname,
        email: req.user.email
    }
    transactionData.data = req.body.paymentData;
    transactionData.product = history;
    
    User.findOneAndUpdate(
        {_id: req.user._id},
        { $push:{history:history}, $set:{cart: []}},
        { new: true},
        (err,user)=>{
            if(err) return res.json({success:false,err});
    
            const payment = new Payment(transactionData);
            payment.save((err,doc)=>{
                if(err) return res.json({success:false,err});
                var products = [];
                doc.product.forEach(item=>{
                    products.push({id:item.id,quantity: item.quantity})
                })
    
    
                async.eachSeries(products,(item,callback)=>{ 
                    Product.update(
                        {_id: item.id},
                        { $inc:{
                            "sold": item.quantity
                        }},
                        {new:false},
                        callback
                    )
                },(err)=>{
                    if(err) return res.json({success:false,err})
                    res.status(200).json({
                        success:true,
                        cart: user.cart,
                        cartDetail:[]
                    })
                })
            });
        }
    )
    

    })

    app.post ('/ api / users / update_profile', auth, (req, res) => {

    User.findOneAndUpdate(
        { _id: req.user._id },
        {
            "$set": req.body
        },
        { new: true },
        (err,doc)=>{
            if(err) return res.json({success:false,err});
            return res.status(200).send({
                success:true
            })
        }
    );
    

    })

    app. get ('/ api / site / site_data', (req, res) => {Site.find ({}, (err, site) => {if (err) return res.status (400) .send (err) ; res.status (200) .send (сайт [0]. siteInfo)}); });

    app.post ('/ api / site / site_data', auth, admin, (req, res) => {Site.findOneAndUpdate ({name: 'Site'}, {"$ set ": {siteInfo: req.body}}, {new: true}, (err, do c) => {if (err) return res. json ({success: false, err}); return res .status (200) .send ({success: true, siteInfo: do c .siteInfo})})})

    const port = process.env.PORT || 3002; app.listen (port, () => {console.log (Server Running at ${port})})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...