Я сохраняю данные для фермы в User, но я пробовал много вещей, чтобы сохранить данные в поле фермы. Я создал API, который регистрирует пользователя и данные сохраняются, ферма является одним из ее объектов, я хочу добавить ферма после регистрации для этого конкретного пользователя. Недавно я попытался обновить, и мой код преобразует ферму в null. У пользователя может быть много ферм.
Я использую mongoose, express и паспорт для аутентификации. Я изменил ферму на Object, ObjectID, Array, но ничего не помогает, каждый раз ферма конвертируется в null. Моя схема верна?
Схема
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
//Device Schema
const Device = new Schema({
modelNumber: {
type: String,
required: true
},
deviceType: {
type: String,
required: true
},
description:{
type:String,
required:false
},
deviceLocation:[
{
latitude:Number,
longitude:Number
}
],
AddedDate: {
type: Date,
default: Date.now
},
});
// User Schema
const UserSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true,
},
password: {
type: String,
required: true
},
location:{
type:String,
required:true
},
createdDate: {
type: Date,
default: Date.now
},
farm:[
{
_id:mongoose.Schema.Types.ObjectId,
description:String,
farmAddDate:{type:Date,default:Date.now},
device:[{Device}]
}
]
});
module.exports = User = mongoose.model("users", UserSchema);
Добавить API фермы
//@route POST api/user/addFarm
//@desc POST Register Farm
//@access Public
addFarm=function (req,res){
User.findOneAndUpdate({ farm: req.body.farm }).then(farm => {
if (farm) {
return res.status(400).json({ farm: "Farm already exists" });
} else {
const newFarm = Farm({
_id:req.body._id,
description:req.body.description,
device:req.body.device
});
newFarm
.save()
.then(farm => res.json(farm))
.catch(err => console.log(err));
}
});
}
router.post('/addFarm',addFarm);
Регистрация нового пользователя
router.post("/register", (req, res) => {
// Form validation
const { errors, isValid } = validateRegisterInput(req.body);
// Check validation
if (!isValid) {
return res.status(400).json(errors);
}
User.findOne({ email: req.body.email }).then(user => {
if (user) {
return res.status(400).json({ email: "Email already exists" });
} else {
const newUser = new User({
name: req.body.name,
email: req.body.email,
password: req.body.password,
location:req.body.location,
});
// Hash password before saving in database
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser
.save()
.then(user => res.json(user))
.catch(err => console.log(err));
});
});
}
});
});
Ошибка:
(узел: 7064) UnhandledPromiseRejectionWarning: CastError: сбой приведения к внедренному значению "\ 'DGR \'" в пути "ферма"
на новом CastError (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ error \ cast.js: 29: 11)
в DocumentArray.cast (C: \ Users \ Притам Кумар \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ schema \ documentarray.js: 402: 19)
в DocumentArray.cast (C: \ Users \ Притам Кумар \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ schema \ documentarray.js: 336: 17)
в DocumentArray.SchemaType.applySetters (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ schematype.js: 892: 12)
в DocumentArray.SchemaType._castForQuery (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ schematype.js: 1304: 15)
в DocumentArray.SchemaType.castForQueryWrapper (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ schematype.js: 1271: 17)
at castUpdateVal (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ helpers \ query \ castUpdate.js: 434: 19)
at walkUpdatePath (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ helpers \ query \ castUpdate.js: 261: 22)
at castUpdate (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ helpers \ query \ castUpdate.js: 79: 18)
at model.Query._castUpdate (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ query.js: 4319: 10)
at castDoc (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ query.js: 4347: 18)
at model.Query.Query._findAndModify (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ query.js: 3325: 19)
на модель. Запрос. (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ query.js: 2902: 8)
at model.Query._wrappedThunk [as _findOneAndUpdate] (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ mongoose \ lib \ helpers \ query \ wrapThunk.js: 16: 8)
at process.nextTick (C: \ Users \ Pritam Kumar \ Documents \ Mern auth \ mern-auth-Sagita \ node_modules \ kareem \ index.js: 369: 33)
at process._tickCallback (internal / process / next_tick.js: 61: 11)
(узел: 7064) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо в результате выброса внутри асинхронной функции без блока catch, либо
отклоняя обещание, которое не было обработано с помощью .catch (). (идентификатор отклонения: 1)
(узел: 7064) [DEP0018] Предупреждение об устаревании: отклонение необработанного обещания устарело. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.
(узел: 7064) DeprecationWarning: Mongoose: findOneAndUpdate()
и findOneAndDelete()
без параметра useFindAndModify
, установленного в false, устарели. Смотри: https://mongoosejs.com/docs/deprecations.html#-findandmodify-
* * Тысяча двадцать-один O / P * * тысяча двадцать-два
id:5d034237a9a144428459a120
name:"Auditi"
email:"b@b.com"
password:"$2a$10$qHvr3VurbyvJyuqbV11NVeKLjn8jhTuP7piI5yMNBOLOQac98zcC2"
location:"XYZ"
createdDate:2019-06-14T06:44:07.035+00:00
farm:Array(data is saved)
__v:0