【问题标题】:Make data persist in form using mongodb node express使用 mongodb node express 使数据以形式持久化
【发布时间】:2019-03-20 23:43:35
【问题描述】:

您好,我可以使用 mlab 连接并存储到 mongodb,但我无法获取表单中的数据以保持刷新。 该表单接受来自输入框的用户输入。

任何帮助都会很棒。

谢谢

【问题讨论】:

  • 如果你想实现的是在发出新的get请求后获取一些特定的表单数据,那么你需要在请求中提供一些关于你需要的表单数据的信息。如果应用程序很简单,您不能只使用本地存储在本地存储数据吗?....另一种过度杀伤方法可能是维护会话并使用 cookie 等来跟踪请求并相应地更新表单数据。
  • 如果是这样,这两个请求默认不能链接。如果您想知道请求是否来自先前请求某些内容并做出相应响应的客户端,则必须使用 express-session。
  • 这意味着您在数据库中拥有的只是一个可由任何客户端访问/更新的单个文档..对吗?如果是这样,请阅读我的答案。

标签: node.js mongodb express mlab


【解决方案1】:

如果能够为所有请求(无论它们来自何处)获取相同的表单数据是您想要的,那么可能的解决方法如下:

1) 将初始表单数据(可能为空)存储在数据库中,获取 ObjectId 并将其硬编码到您的代码中,这样所有更新都将仅针对该特定 MongoDB 文档进行。

2) 表单路由(下一个)除了提供具有表单的文件之外应该什么都不做

app.get('/form1', function (req, res) {
    res.sendFile(__dirname + '/public');
//record.find({"_id": ObjectId("MLAB ID")})......dont do this


});

3) 应该有另一个发送表单数据的路由

app.get('/getdata', function(req, res) {
        record.find({"_id": ObjectId("MLAB ID")}, function(err, doc) {
            res.send(doc)
        })
    });

4)您发送给客户端的静态文件应该有一个 javascript 函数,这样它会在您的窗口加载后立即请求表单数据,然后根据收到的数据设置输入元素的值:

 window.onload = function() {
        //make a GET request to /getdata to get form data....store it in obj
        //then set the input values
       document.getElementById("yourchoice").value = obj.yourchoice;
        //and set the value of other input fields ....in similar amnner

    }

5) 您发出的 POST 请求应更新该特定文档(findOneAndUpdate??)

这种方法的缺点:

对于一个操作,我们从服务器请求一个文件,然后另一个请求来获取表单数据,所以一个操作需要两个请求,因为我们不能同时使用 res.sendFile() 和 res.json()...一种方式解决这个问题的方法是使用模板引擎在 HTML 文档中隐藏表单数据。可以很容易地找到有关此的更多信息。无论如何,上述方法确实解决了您的目的。

我希望我正确理解了问题陈述。

编码愉快!!

编辑:虽然上面提到的几点是解释性的,但我已经写了一个示例 sn-p 在:https://pastebin.com/AvgVyx7b

效果很好

【讨论】:

  • 无需抱歉 :-) 事情有时会变得混乱。 .........据我所知,即使在页面刷新后,输入元素也无法保存数据。最接近的方法是在页面刷新后使用从服务器请求的数据重新填充输入元素。不满足吗?
  • 另一种方法是在服务器上使用模板引擎并在服务器上形成html页面,以便在输入元素标签中设置默认值,然后发送文件。但即便如此,客户端首先必须单击一个按钮/执行一些操作以将数据保存在服务器上,以便稍后检索。
  • 答案中提到的要点将帮助您实现这一目标,无论如何我会尽快提供更详细的示例代码..也许明天......直到尝试实施这些步骤。
  • 我已经编辑了答案,你可以看看。干杯!!
猜你喜欢
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
相关资源
最近更新 更多