#mongodb #mongoose
#mongodb #mongoose
Вопрос:
Я новичок в программировании.
Сейчас я работаю над проектом стека MERN, пытаясь отправить данные в мою базу данных MongoDB, но после многих попыток не удалось.
База данных:
В одной базе данных есть 2 коллекции: «элементы» и «пользователи». Схемы следующие:
Схема элемента:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const ItemSchema = new Schema(
{
entryDate: {
type: Date,
required: true
},
leaveDate: {
type: Date,
required: true
}
},
{
collection: 'items'
}
);
module.exports = Item = mongoose.model('Item', ItemSchema);
Схема пользователя:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const UserSchema = new Schema({
userName: {
type: String,
required: true
},
Password: {
type: String,
required: true
}
});
module.exports = User = mongoose.model('users', UserSchema);
Интерфейс:
handleClick = (e) => {
const API_URL = 'http://localhost:5000/api/users/';
this.setState({
startDate: this.handleStartDate(e.target.value),
endDate: this.handleEndDate(e.target.value)
});
const newDate = {
startDate: this.state.startDate,
endDate: this.state.endDate
}
const data = JSON.stringify(newDate);
axios({
method: 'post',
url: API_URL 'addnew',
data: data,
headers: {
'Content-Type': 'application/json; charset=utf-8',
'Access-Control-Allow-Origin': '*',
"Accept": "application/json"
}
})
.then(response => {
if (response.status === 200) {
console.log('The status code is : ' response.status);
}
})
.catch(err => {
console.log('-------Failed to add new data. Error occurred.-------');
});
};
Серверная часть:
// @route POST api/items
// @desc Create An Item
// @access Public
router.post('/addnew', function(req, res) {
const newItem = new Item({
entryDate: req.body.entryDate,
leaveDate: req.body.leaveDate
});
console.log(newItem);
// save model to database
newItem.save(function(err) {
if (err) {
res.json({
success: false,
message: 'failed to post data'
})
} else {
res.json({
success: true,
message: 'success to post data'
})
}
})
});
Я протестировал внутренний API с Postman, код состояния равен 200, но возвращает сообщение об ошибке, показанное ниже, как на скриншоте:
Я не уверен, где я ошибся, я предполагаю, что данные схемы «Элемент» не могут быть сохранены в коллекции «элементы», но я понятия не имею, что мне делать.
Я буду очень признателен за каждую небольшую помощь. Заранее спасибо!
Ответ №1:
Попробуйте изменить так
const Item = require('path/to/ItemSchemas');
// @route POST api/items
// @desc Create An Item
// @access Public
router.post('/addnew', function(req, res) {
const newItem = new Item({
entryDate: req.body.entryDate,
leaveDate: req.body.leaveDate
});
console.log(newItem);
// save model to database. Since newItem hasn't been added to the db, we used Item.save instead
Item.save(newItem, function(err) {
if (err) {
// save to db failed!
res.status(500).json({
success: false,
message: err
})
} else {
res.json({
success: true,
message: 'success to post data'
})
}
})
});
Комментарии:
1. Спасибо за вашу помощь! Я попробовал этот код, но при тестировании с Postman я получил «500 — внутренняя ошибка сервера». Поскольку я создал две коллекции «элементы» и «пользователи» для 2 схем соответственно, будет ли это автоматически сохранять данные в коллекции «элементы» или мне нужно указать в коде?
2. Ах, я этого не понял, извините, я быстро прочитал ваш пост. Поскольку вы создаете свой экземпляр с помощью элемента constructir
const newItem = new Item....
Вы не должны использоватьUser.save
ноItem.save
. Кроме того, вы должны добавить некоторый журнал в свое соединение, чтобы убедиться, что вы подключаетесь к своему экземпляру mongo без каких-либо ошибок