Sails.js:新创建的记录在刷新之前不会填充到页面上

Posted

技术标签:

【中文标题】Sails.js:新创建的记录在刷新之前不会填充到页面上【英文标题】:sails.js: Newly created record doesn't populate on page until refresh 【发布时间】:2014-12-13 15:04:05 【问题描述】:

我有一个小应用程序,我正在制作原型(我是 Sails 的新手),它在列表中有一个任务。简单的东西。但是,当我创建任务并在创建后转发到列表时,该任务不会出现在我的列表中。如果我刷新页面,它会这样做。

这里是sn-ps的代码:

在任务中->创建

List.findOne(req.session.List.id)
        .exec(function foundTasks (err, list) 
    Task.find(where:  list: list.id , limit: 1, sort: 'priority desc')
            .exec(function getTaskPriority (err, task) 
            if (err) 
                console.log(err);
                req.session.flash = 
                    err: err
                
            

            list.tasks.add(name: req.param('name'), list: req.session.List.id);

            list.save(function(err) );
        ); 

        res.redirect('/list/show/'+req.session.List.id);
    );
);

在列表中->显示

show: function(req, res, next) 
    List.findOne(req.param('id'))
        .populate('tasks')
        .exec(function foundTasks (err, r) 

        req.session.List = r;

        if (err) return next(err);
        res.view(
            name: r.name,
            tasks: r ? r.tasks : []
        );
    );
,

当我创建一个普通项目时不会发生这种情况,只通过 .add() 功能创建一个项目。它也发生在我代码的其他地方(我有多个上下文添加)。

使用此代码,如果我创建任务“执行此 1”,我将被重定向到我的任务列表,并且“执行此 1”不存在。如果我点击刷新,它会显示。如果我添加“Do this 2”,那么我将被重定向到任务列表,并且只出现“Do this 1”。直到我刷新,才会出现“Do this 2”。

我认为可能存在异步问题(页面加载速度比在数据库中创建和读取记录的速度要快?)但我添加了调试步骤来解决这个问题。

有人有什么想法吗?

【问题讨论】:

【参考方案1】:

我认为您在保存列表之前会重定向到显示页面。你必须这样做:

list.tasks.add(name: req.param('name'), list: req.session.List.id);

list.save(function(err) 
    res.redirect('/list/show/'+req.session.List.id);
);

list.save()的回调中重定向到/list/show/:id

【讨论】:

以上是关于Sails.js:新创建的记录在刷新之前不会填充到页面上的主要内容,如果未能解决你的问题,请参考以下文章

Sails.js WebSocket 如何创建新通道?

Sails.js:生产环境 +sails-mysql - 提升时未创建数据库表

_id 找不到带有 Mongo 的 Sails.js

Sails.js 将密钥和数据流式传输到 Angular

Sails.js 创建索引(根)控制器

如何动态刷新 ListView?