Пн goose порядок ввода - PullRequest
1 голос
/ 06 апреля 2020

Я очень новичок в API. Я пытаюсь создать тестовый API для моего будущего сайта, но я застрял в какой-то момент. Я использовал SQL, и я привык к заказам при вставке данных в базу данных. При использовании MongoDB и библиотеки mon goose при вставке предварительно сделанный порядок Схемы теряется после вставки данных. Это файл моей модели для пользователя.

const mongoose = require("mongoose")

const UserSchema = mongoose.Schema({
    username: {
        type: String,
        require: true,
        minlength: 6,
        maxlength: 64
    },
    password: {
        type: String,
        require: true,
        minlength: 6,
        maxlength: 255
    },
    email: {
        verified: {type: Boolean, default: false},
        type: String,
        require: true,
        minlength: 11,
        maxlength: 64
    },
    description: {
        type: String,
        require: true,
        minlength: 20,
        maxlength: 5000
    },
    permissions: {
        verified: {type: Boolean, default: false, require:true},
        admin: {type: Boolean, default: false, require:true},
        server: {type: Number, default: 0, require:true}
    },
    image: {
        type: String,
        require: true,
        default: ""
    },
    reg_date: {
        type: Date,
        default: Date.now(),
        require: true
    }

});

module.exports = mongoose.model("User", UserSchema);

Тело запроса POST:

{
   "username": "nameblabla",
   "email": "email@email.com",
   "description": "akjfhajkléfhakaklsfhak-sfn-ak.sfnkl-asfnkléas-f",
   "password": "pasfgasgasdg"
}

И файл запроса POST:

const express = require('express')
const router = express.Router();
const userModel = require('../models/User')


//VALIDATION
const joi = require('@hapi/joi');

const schema = joi.object({
    username: joi.string().min(6).required(),
    email: joi.string().min(6).required().email(),
    description: joi.string().min(20).required(),
    password: joi.string().min(6).required()
});

router.post('/signup', async (req,res) => {

    //VALIDATE
    const {error} = schema.validate(req.body, {abortEarly: false});
    if(error){
        let msg = ""
        error.details.forEach(e => {
            msg += e.message + "\n";
        });
        return res.status(400).send(msg)
    }else{
        const user = new userModel({
            username: req.body.username,
            email: req.body.email,
            description: req.body.description,
            password: req.body.password
        });
        try{
            const savedUser = await user.save();
            res.send(savedUser)
        }catch(err) {
            res.status(400).send(err);
        }
    }
})

module.exports = router

Вставленные данные выглядят так:

{
   "permissions": {
       "verified": false,
       "admin": false,
       "server": 0
   },
   "image": "",
   "reg_date": "2020-04-06T14:50:02.910Z",
   "_id": "5e8b41a0cddf023104955793",
   "username": "Miraglia1",
   "email": "email@email.com",
   "description": "akjfhajkléfhakaklsfhak-sfn-ak.sfnkl-asfnkléas-f",
   "password": "pasfgasgasdg",
   "__v": 0
}

Поэтому, когда я сохраняю данные, по умолчанию ключ: пары значений располагаются над отправленными данными. Но есть ли какое-либо решение, чтобы сохранить порядок Схемы? Пожалуйста, помогите мне.

Заранее спасибо. :)

...