1

我正在尝试在 mongodb 记录上创建一个事件日志类型的字段,我可以在其中存储活动列表。我第一次运行该函数时,它会正确地附加到数组中,但随后的调用会覆盖最后一个条目而不是附加。如果我重新启动服务器或在浏览器中刷新页面,它将再次追加,然后重复相同的行为。我正在学习 node 和 javascript,所以我确定这是我犯的一些错误,但我似乎无法弄清楚。

客户端上的 Javascript 是一个制表符事件。

cellEdited:function(cell){
    //cell - cell component
    const oldValue = cell.cell.oldValue;
    const newValue = cell.cell.value;
    const title = cell.cell.column.definition.title;
    var report = cell.cell.row.data;

    report.event = `Updated ${title} from ${oldValue} to ${newValue}`;

    $.ajax({
        type: 'POST',
        url: '/api/update',
        data: report,
        dataType: 'json'
    });            
}

它在服务器上调用的路由:

app.post('/api/update', isAuthenticated, function(req, res) {
    var report = req.body;
    var reason = '';
    if (typeof report.event !== 'undefined') {
        reason = report.event;
        delete report.event;
    } else {
        reason = 'Report updated';
    }

    db.DamageReport.findOneAndUpdate({ _id: report._id}, report, function (err, doc) {
        if (err) {
            console.log('Err updating report ', err);
            return res.send(500, { error: err});
        }
        /*
        *   Write eventlog
        */
        var event = {"date": new Date(), "user": req.user.email, "event": reason };
        appendLog(doc._id, event);

        return res.json(doc);
    });
});

appendLog 函数:

function appendLog(id, entry) {
    /*
    *       entry format:
    *           date: Date
    *           user: String
    *           event: String
    */

    if (typeof(entry.date) !== 'object') {
        entry.date = new Date();
    }

    db.DamageReport.findByIdAndUpdate(id, {$push: {eventLog: entry}}, function(err, result) {
        if (err) {
            return console.log('Error writing eventLog: ', err);
        }
        return(result);
    });  
}
4

1 回答 1

0

它不会附加多个,因为之前的保存包含原始形式的 Eventlog 数组,因此每次保存时,它都会将其设置回原始数组,然后附加最后一次更新。

于 2018-08-03T22:42:08.800 回答