Javascript ValidationError:RFDeviceId:路径'RFDeviceId'是必需的
我是新来的,只知道nodejs和mongodb的BAICS,所以请帮助我学习 我犯了这个错误 创建数据集时出错:ValidationError:RFDeviceId:PathJavascript ValidationError:RFDeviceId:路径'RFDeviceId'是必需的,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我是新来的,只知道nodejs和mongodb的BAICS,所以请帮助我学习 我犯了这个错误 创建数据集时出错:ValidationError:RFDeviceId:PathRFDeviceId是必需的,坐标:Path坐标是必需的,坐标:Path坐标是必需的,速度:Path速度是必需的,sat\U跟踪:Pathsat\U跟踪是必需的。,gps固定类型:路径gps固定类型为必填项,温度A:PathtemperatureAA为必填项,湿度:路径湿度为必填项,蝙蝠v:Path蝙蝠v为必填项,蝙蝠p:P
RFDeviceId
是必需的,坐标:Path坐标
是必需的,坐标:Path坐标
是必需的,速度:Path速度
是必需的,sat\U跟踪:Pathsat\U跟踪
是必需的。,gps固定类型:路径gps固定类型
为必填项,温度A:PathtemperatureAA
为必填项,湿度:路径湿度
为必填项,蝙蝠v:Path蝙蝠v
为必填项,蝙蝠p:Path蝙蝠p
为必填项
模型中我的datasets.js就是这样
var mongoose = require("mongoose");
// Declare schema
var datasetSchema = new mongoose.Schema({
owner_name: {type: String, required: true},
RFDeviceId: {type: String, required: true, index: {unique: true}},
coordinates: {type: Number, required: true},
CoordinatesTime: {type: String, required: true},
speed: {type: String, required: true},
sat_tracked: {type: Number, required: true},
gps_fix_type: {type: Number, required: true},
temperatureata: {type: Number, required: true},
humidity: {type: Number, required: true},
bat_v: {type: Number, required: true},
bat_p: {type: Number, required: true}
});
// Export schema
mongoose.model("Dataset", datasetSchema);```
以及路由中的my dataset.js
/* CRUD API */
// POST new dataset request
router.post("/", helper.authenticate, function(req, res) {
// Used to set the dataset owner
var sessionUser = req.session.user.name;
// Get values from the post request
var RFDeviceId = req.body.RFDeviceId;
var coordinates = req.body.coordinates;
var CoordinatesTime = req.body.CoordinatesTime;
var speed = req.body.speed;
var sat_tracked = req.body.sat_tracked;
var gps_fix_type = req.body.gps_fix_type;
var temperatureata = req.body.temperatureata;
var humidity = req.body.humidity;
var bat_v = req.body.bat_v;
var bat_p = req.body.bat_p;
// Delete the values from the request body so that we only keep information about the variables
delete req.body.RFDeviceId;
delete req.body.coordinates;
delete req.body.CoordinatesTime;
delete req.body.speed;
delete req.body.sat_tracked;
delete req.body.gps_fix_type;
delete req.body.temperatureata;
delete req.body.humidity;
delete req.body.bat_v;
delete req.body.bat_p;
`
// This is so that we can loop through the object in reverse order
// We do that so that the fields are saved in the right order on the db
// (this way it will appear in the right order on the 'edit' view)
var propertiesList = [];
for (var property in req.body) {
if (req.body.hasOwnProperty(property)) {
propertiesList.push(property);
}
}
propertiesList.reverse();
var variablesFields = {};
for (var i in propertiesList) {
console.log(propertiesList[i])
variablesFields[propertiesList[i]] = {name:req.body[propertiesList[i]],
values: Array};
}
// Create dataset
Dataset.create({
RFDeviceId: RFDeviceId,
coordinates: coordinates,
CoordinatesTime: CoordinatesTime,
speed: speed,
sat_tracked: sat_tracked,
gps_fix_type: gps_fix_type,
temperatureata: temperatureata,
humidity: humidity,
bat_v: bat_v,
bat_p: bat_p,
owner_name: sessionUser
}, function(err, dataset) {
if (err) {
console.log("Error creating the dataset: " + err);
req.session.error = "A problem occured when creating the dataset. Please try again.";
} else {
console.log("New dataset created with id: " + dataset._id);
req.session.success = "Dataset " + "name" + " created successfully.";
}
res.redirect("/index");
});
});
// PUT request to update dataset
router.put("/:id/", helper.authenticate, function(req, res) {
// Get values from the POST request
var RFDeviceId = req.body.RFDeviceId;
var coordinates = req.body.coordinates;
var CoordinatesTime = req.body.CoordinatesTime;
var speed = req.body.speed;
var sat_tracked = req.body.sat_tracked;
var gps_fix_type = req.body.gps_fix_type;
var temperatureata = req.body.temperatureata;
var humidity = req.body.humidity;
var bat_v = req.body.bat_v;
var bat_p = req.body.bat_p;
// Delete the values from the request body so that we only keep information about the variables
delete req.body.RFDeviceId;
delete req.body.coordinates;
delete req.body.CoordinatesTime;
delete req.body.speed;
delete req.body.sat_tracked;
delete req.body.gps_fix_type;
delete req.body.temperatureata;
delete req.body.humidity;
delete req.body.bat_v;
delete req.body.bat_p;
var setList = {};
var unsetList = {};
var updateQuery = {};
// Find dataset by id
Dataset.findById(req.params.id, function(err, dataset) {
updateQuery = {
RFDeviceId: RFDeviceId,
coordinates: coordinates,
CoordinatesTime: CoordinatesTime,
speed: speed,
sat_tracked: sat_tracked,
gps_fix_type: gps_fix_type,
temperatureata: temperatureata,
humidity: humidity,
bat_v: bat_v,
bat_p: bat_p,
}
// If variable in request body and not in dataset, add to setList (or if no variable at all in dataset)
for (var property in req.body) {
if (!dataset.data||(req.body.hasOwnProperty(property)&!dataset.data.hasOwnProperty(property))) {
console.log(property)
console.log(req.body[property])
setList["data."+ property] = {name:req.body[property],
values: Array};
}
}
// If variable in dataset but not in request body, add to unsetList
for (var property in dataset.data) {
if (dataset.data&&dataset.data.hasOwnProperty(property)&!req.body.hasOwnProperty(property))
{
unsetList["data."+property] = true;
}
}
// If setList or unsetList non-empty, add to updateQuery
if (Object.keys(setList).length) {
updateQuery["$set"] = setList;
}
if (Object.keys(unsetList).length) {
updateQuery["$unset"] = unsetList;
}
// Update dataset
dataset.update(updateQuery, function(err, response) {
if (err) {
console.log("Error updating dataset: " + err);
req.session.error = "Update failed, please try again.";
} else {
console.log("Update on dataset: " + dataset._id);
req.session.success = "Update successul.";
}
res.redirect("/index");
});
});
});
如果我设置了required:false expect with owner\u name,那么它发送的第一个数据发送时间MongoError:E11000重复键错误集合:test.datasets index:index\u 1 dup key:{:null}
输出屏幕截图
当您创建模型中所需的所有字段时,请大家非常高兴地帮助它。。因此,无论何时创建任何数据集,都需要提供所有必需字段的数据 在创建数据集查询API中,首先直接将req.body.[field value]分配给一个新变量,该变量也复制了该原始变量的引用 删除原始变量时,复制的变量也会丢失其值并设置为“未定义”。 现在,您的创建查询如下所示:
// POST new dataset request
router.post("/", helper.authenticate, function(req, res) {
// Used to set the dataset owner
var sessionUser = req.session.user.name;
// Get values from the post request
var RFDeviceId = req.body.RFDeviceId;
var coordinates = req.body.coordinates;
var CoordinatesTime = req.body.CoordinatesTime;
var speed = req.body.speed;
var sat_tracked = req.body.sat_tracked;
var gps_fix_type = req.body.gps_fix_type;
var temperatureata = req.body.temperatureata;
var humidity = req.body.humidity;
var bat_v = req.body.bat_v;
var bat_p = req.body.bat_p;
// This is so that we can loop through the object in reverse order
// We do that so that the fields are saved in the right order on the db
// (this way it will appear in the right order on the 'edit' view)
var propertiesList = [];
for (var property in req.body) {
if (req.body.hasOwnProperty(property)) {
propertiesList.push(property);
}
}
propertiesList.reverse();
var variablesFields = {};
for (var i in propertiesList) {
console.log(propertiesList[i])
variablesFields[propertiesList[i]] = {name:req.body[propertiesList[i]],
values: Array};
}
// Create dataset
Dataset.create({
RFDeviceId: RFDeviceId,
coordinates: coordinates,
CoordinatesTime: CoordinatesTime,
speed: speed,
sat_tracked: sat_tracked,
gps_fix_type: gps_fix_type,
temperatureata: temperatureata,
humidity: humidity,
bat_v: bat_v,
bat_p: bat_p,
owner_name: sessionUser
}, function(err, dataset) {
if (err) {
console.log("Error creating the dataset: " + err);
req.session.error = "A problem occured when creating the dataset. Please try again.";
} else {
console.log("New dataset created with id: " + dataset._id);
req.session.success = "Dataset " + "name" + " created successfully.";
}
res.redirect("/index");
});
});
我希望你有正确做这件事的想法
[如果这个答案对你有帮助的话,请对它投赞成票]嗨,你能通过提供一个示例文档和预期输出来解释吗?请用这个信息更新你的问题。你能帮我指出我犯了什么错误吗。非常荣幸@SuleymanSahI感谢您回答我的问题,但我已经检查了这种情况,错误是相同的。如果您有更好的想法,请帮助。