Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用MongoDB mongoose的正确方法是什么?_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 使用MongoDB mongoose的正确方法是什么?

Javascript 使用MongoDB mongoose的正确方法是什么?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,试图创建一个小项目,但在填充方面有点困难。我想在用户和项目之间创建一个关系。在这一点上,保存新用户是否是一个好的做法,然后我可能应该保存新项目,然后按属性查找用户并填充到项目?或者也许还有别的方法?我一直试图“追随”其他人的榜样,但还是被困在其中 目前我有User.js const mongoose = require("mongoose"); const UserSchema = new mongoose.Schema({ name: { type

试图创建一个小项目,但在填充方面有点困难。我想在用户和项目之间创建一个关系。在这一点上,保存新用户是否是一个好的做法,然后我可能应该保存新项目,然后按属性查找用户并填充到项目?或者也许还有别的方法?我一直试图“追随”其他人的榜样,但还是被困在其中

目前我有User.js

const mongoose = require("mongoose");

const UserSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
    },
    lastname: {
        type: String,
        required: true,
    },
    personalCode: {
        type: String,
        required: true
    },
    userGoods: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "Item",
    },
    date: {
        type: Date,
        default: Date.now,
    },
});

module.exports = User = mongoose.model("user", UserSchema);
这也是我的Item.js

const mongoose = require("mongoose");
const ItemSchema = new mongoose.Schema({
    itemName: {
        type: String,
        required: true
    },
    itemComments: {
        type: String,
    },
    itemQuantity: {
        type: Number,
        required: true,
    },
    itemPraba: {
        type: Number,
    },
    itemWeight: {
        type: Number,
    },
    moneyReceived: {
        type: Number,
        required: true
    },
    percentages: {
        type: Number,
        required: true
    },
    moneyReturn: {
        type: Number,
        required: true
    },
    itemImei: {
        type: String,
    },
    date: {
        type: Date,
        default: Date.now,
    },

})

module.exports = Item = mongoose.model("item", ItemSchema);
这是我的items.js

const express = require("express");
const {check, validationResult} = require("express-validator");
const router = express.Router();
const auth = require("../../middlewares/auth")
const bcrypt = require("bcryptjs");
// Item model
const Item = require("../../models/Item");
// User model
const User = require("../../models/User");

/**
 * @Route POST api/items
 * @Desc Create new item
 * @Access Private
 */

router.post("/", [auth,
        check("name", "Name is required!").not().isEmpty(),
        check("lastname", "Lastname is required").not().isEmpty(),
        check("personalCode", "Personal user code is required!").not().isEmpty(),
    ],
    async (req, res) => {
        // Handle errors
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.status(400).json({errors: errors.array()});
        }
        // Destruct body request
        const {
            name,
            lastname,
            personalCode,
            itemName,
            itemComments,
            itemQuantity,
            itemPraba,
            itemWeight,
            moneyReceived,
            percentages,
            moneyReturn,
            itemImei
        } = req.body;

        try {
            // Check for already existing user, if user exists - UPDATE
            let user = await User.findOne({personalCode: personalCode});
            if (user) {
                // TODO update user with new items
            } else {

                // Build item object
                const itemFields = {};
                if (itemName) itemFields.itemName = itemName;
                if (itemComments) itemFields.itemComments = itemComments;
                if (itemQuantity) itemFields.itemQuantity = itemQuantity;
                if (itemPraba) itemFields.itemPraba = itemPraba;
                if (itemWeight) itemFields.itemWeight = itemWeight;
                if (moneyReceived) itemFields.moneyReceived = moneyReceived;
                if (percentages) itemFields.percentages = percentages;
                if (moneyReturn) itemFields.moneyReturn = moneyReturn;
                if (itemImei) itemFields.itemImei = itemImei;

                // Create new user
                user = new User({
                    name,
                    lastname,
                    personalCode
                });

                // Hash personal code
                const salt = await bcrypt.genSalt(10);
                user.personalCode = await bcrypt.hash(personalCode, salt);

                // Save user
                await user.save();

                // Is it possible to do like this? Or I should be doing in other way?
                // await User.findOne({name: name}).populate(`${itemFields}`);

            }
        } catch (error) {
            console.error(error.message);
            res.status(500).send("Server error occurred");
        }
    }
)

module.exports = router;