您好我正在使用typicode / lowdb json文件作为数据库测试快速应用程序,但我无法使更新功能正常工作。 这是一些代码示例:
typicode / lowdb db.json
{
"posts": [
{
"name": "first post",
"desc": "first desc",
"slug": "first-post",
"id": "uuid.v4()"
},
{
"name": "second post",
"desc": "second desc",
"slug": "second-post",
"id": "uuid.v4()"
}
]
}
创建/更新/ delete.js
var uuid = require('node-uuid');
var low = require('lowdb');
var storage = require('lowdb/file-async');
var db = low('./database/db.json',{ storage: storage });
var add = function (item) {
var id = uuid.v4();
item.id = id;
db('posts').push(item);
};
var getById = function (id) {
return db('posts').find({ id: id});
};
var update = function (item,id) {
item.id = id;
db('posts').chain().find({ id: id}).assign(item).value();
//nothing happens the db.json file is not updated
//using console log i get this from update:
{
"name": "first post edited",
"desc": "first desc edited",
"slug": "first-post-edited",
"id": "undifined"
}
console.log(db('posts').chain().find({ id: id}).assign(item).value());
};
handle-the-update.js
的示例 exports.update = router.post('/update',function (req, res) {
db.update({name:req.body.name,desc:req.body.desc,slug:slug,id:req.params.id});
res.redirect('/post');
});
创建删除并获取帖子by-id函数工作正常唯一的问题是更新。 知道为什么会这样吗?我测试了 .filter(), .where(),但db.json文件无法正常更新
答案 0 :(得分:1)
以下是您的代码示例:
var low = require('lowdb');
var fileAsync = require('lowdb/file-async');
var db = low('./database/db.json',{ storage: fileAsync });
var postStore = db.get('posts');
postStore.find({ id: "uuid.v4()" })
.assign({name: "new name"})
.value();

这应该有效。今天已经过测试。
它会更新两个示例记录,因为它们具有相同的ID。
答案 1 :(得分:0)
根据lowdb指南,你必须调用write()方法。 所以替换你的字符串:
db('posts').chain().find({ id: id}).assign(item).value();
要:
db('posts').chain().find({ id: id}).assign(item).write();