所以我发送任务数据,开始日期和结束日期。但是我无法对数据库进行任何更改,因为它认为我使用mongoDB获得了一个不可变的错误...我想坚持使用.then方法来获取我的js代码。
我的其他方法工作正常,我只是无法正确使用此更新方法...
app.put('/missions/:id', function (req, res) {
if (req.user) {
model.Mission.findById(req.params.id).then(function(Mission){
console.log("req.body.secret_mission: ",req.body.secret_mission)
Mission['secret_mission'] = req.body.secret_mission;
Mission['start'] = req.body.start;
Mission['complete'] = req.body.complete;
Mission.update().then(function(){
res.set('Access-Control-Allow-Origin', '*');
res.sendStatus(201);
});
});
}else{
res.sendStatus(401);
}
});
答案 0 :(得分:1)
我能够使用所提供的所有帮助来提供可行的解决方案,并与我如何调用其余代码保持一致。对那些回复的人表示谢谢!
不是事先在我的集合中设置元素,而是应该在更新请求中执行此操作。我没有调用2个方法,而是使用了findOneAndUpdate。
app.put('/missions/:id', function (req, res) {
if (req.user) {
model.Mission.findOneAndUpdate(
{'_id' : req.params.id},
{ $set: {"secret_mission" : req.body.secret_mission,
"start" : req.body.start},
"complete" : req.body.complete
}).then(function(err, missions){
if (err) return res.json({Error: err});
res.json(missions);
});
} else {
res.sendSatus(401);
}
});
答案 1 :(得分:0)
我已经清理了你的代码:
req.user
检查中间件,cors
模块,不在每个处理程序中使用CORS标头async/await
内容为其提供更多同步外观mission/:id
路由处理程序只是具有没有垃圾的具体逻辑检查此解决方案:
const cors = require('cors'); // install: npm i --save cors
const _ = require('lodash'); // install: npm i --save lodash
app.use(cors());
const isUserAuthorized = (req, res, next) => {
if (!req.user) return res.status(401).send();
next();
}
app.put(
'/missions/:id',
isUserAuthorized,
async (req, res) => {
try {
const mission = await model.Mission.findById(req.params.id);
if (!mission) return res.status(404).send();
mission.set(_.pick(req.body, ['secret_mission', 'start', 'complete']);
await mission.save();
res.status(201).send();
}
catch (error) {
console.log(error);
res.status(500).send();
}
});
或者如果您不关心db中的记录是否存在,那么您可以直接推送更新:
app.put(
'/missions/:id',
isUserAuthorized,
async (req, res) => {
try {
const data = _.pick(req.body, ['secret_mission', 'start', 'complete']);
await model.Mission.update({_id: req.params.id}, {$set: data});
res.status(201).send();
}
catch (error) {
console.log(error);
res.status(500).send();
}
});