mongoose/mongodb 不会用 PUT 更新
Posted
技术标签:
【中文标题】mongoose/mongodb 不会用 PUT 更新【英文标题】:mongoose/mongodb won't update with PUT 【发布时间】:2016-02-24 20:26:28 【问题描述】:我目前是表达和失败方式的学生。
我目前的头疼是 PUT 不是 PUT-ting。我的应用程序有大量数据,我需要在用户第一次登录时上传。我认为之后会更快,因为我只能上传已更改的内容。这个理论不太行得通。
步骤如下:
-
用户第一次登录,通过验证
应用在 Values 架构中创建一个新条目,其中仅包含必填字段
应用翻转用户架构中的开关以显示创建的值
然后应用将其余值放入该现有架构中。
我把 2 和 4 分成两部分,因为当我把它分成一个时,出于某种原因,Mongoose 开始发出嘶嘶声。除了现在,它实际上并没有在第 4 步放置任何东西,甚至在用户编辑它之后(通过应用程序中的表单)。就好像它停止听了一样。
这就是 values 架构的样子(因为它太大而被截断):
var ValueSchema = new Schema(
user_id:
type: String,
required: true,
unique: true
,
base: [
type: String,
required: true
],
value1: [ String ],
value2: [ String ],
value3: [ String ],
value4: [ String ]
);
这是 GETting 和 PUTting 部分:
// ------------------ FORM VALUES
router.route('/values/:user_id')
// create
.post(function(req, res)
var task = req.body;
var value = new Value(task);
value.save(function(err)
if (err)
res.json(err);
else
res.write("success");
);
)
// update
.put(function(req, res)
var values = req.body;
var user_id = req.params.user_id;
Value.update(user_id: user_id, function(err, values)
if (!err)
res.json("okay");
else
res.write("fail");
);
)
// view
.get(function(req, res)
var id = req.params.user_id;
Value.find('user_id':id, function(err, value)
if (!err)
res.send(value);
else
res.write("fail");
);
)
);
由于我仍然无法弄清楚的原因,第 2 步需要永远。最重要的是,Firefox 发送没有令牌的消息,但 http 调用在“网络”选项卡和服务器本身的输出中都显示为成功。这是其中一个 http 调用:
return $http(
method: 'PUT',
url: '/api/values/' + userId,
data: values,
headers:
'x-access-token': token
)
.then(function (response)
// chained to next step
// etc
对我来说看起来很教科书,但是当我在任何 PUT 后签入 Postman 时,值条目看起来像这样:
[
"_id": "56513f140dab13e932682cf2",
"user_id": "5651f7454cd0c2543ca5202f",
"__v": 0,
"value1": [],
"value2": [],
"value3": [],
"value4": []
]
在第一次 POST 之后,它根本没有更新。疯狂的是,我可以更新其他两个模式并且一切正常,并且这些模式与 Value 模式具有相同的模式。帮助!我错过了什么?
提前致谢!
【问题讨论】:
【参考方案1】:您的 update()
方法缺少更新文档:
// update
.put(function(req, res)
var values = req.body;
var user_id = req.params.user_id;
Value.update(user_id: user_id, values, function(err, values)
if (!err)
res.json("okay");
else
res.write("fail");
);
)
【讨论】:
我有 "$set": values 在那里,但把它拿出来 b/c 我得到了各种关于它找不到 user_id 的错误。因此,如果我只输入“值”,那只是添加它,但如果我使用 $set,那就是正在搜索的内容? 如果你仔细阅读docs,update()
方法有不同的签名和可选参数,但是通过上面的更新,如果查询匹配,默认操作类似于$set
运算符更新任何文件。
赞美和奉承的圣魔堆,它有效。仍然不知道为什么第一个 POST 需要这么长时间,但至少现在 PUT 正在运行。谢谢!!
我知道这篇文章发布已经一年多了,但仍然如此。谢谢你。这以你无法想象的方式帮助了我。你的回答更容易理解和直接——比我找到的关于 put
requests 的教程更容易!
@DeeJ。不用担心。很高兴我能帮上忙。以上是关于mongoose/mongodb 不会用 PUT 更新的主要内容,如果未能解决你的问题,请参考以下文章
将新评论推送到 mongoose/mongodb/angularjs 中的评论数组中