【问题标题】:How to make CRUD operations on a remote Mongodb with Nodejs如何使用 Nodejs 在远程 Mongodb 上进行 CRUD 操作
【发布时间】:2013-11-18 00:16:56
【问题描述】:

我最近开始使用 NodeJS - 我只知道它是一种服务器端技术。我所做的和想要完成的如下:

我有一个在远程服务器上运行的 MongoDB。我正在使用nodejs mongodb driver,只需执行以下操作,我就可以连接到数据库并创建一个文档:

// main.js
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://remote_url:27017/mymongo', function(err, db) {
    var document = {a:"1", b:"2"};
    db.collection('collection').insert(document, function(err, records) {
        if (err) throw err;
    }
}

如您所知,上面的代码需要一个控制台调用,例如:node main.js,但是我有一个带有多个文本字段的 HTML5 前端,我想通过一个简单的按钮单击事件将这些字段传递到我的数据库。我的问题是:

如果我像上面那样直接连接到远程mongodb真的很愚蠢吗?我可以从我的 HTML 页面调用脚本吗?如果可以,那么与将其重新设计为客户端-服务器结构相比有哪些缺点?

最后,我认为正确的做法是在远程服务器上使用 nodejs 创建一个 http 服务器,将客户端的请求传递给 mongodb 驱动程序。我对吗?

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    您可以尝试使用 vanilla NodeJS 或您选择的许多其他框架来构建一个 REST API 以与 MongoDB 服务器交互。你可以试试baucis*。

    *免责声明:我是baucis的主要作者

    【讨论】:

    • 看起来很有希望,但我想我会用 express 自己写。谢谢!
    【解决方案2】:

    像上面这样直接连接远程mongodb真的很傻吗?

    不,使用本机 MongoDB 驱动程序是非常标准的。但是,我不会连接然后立即与您的数据库交互,而是构建应用程序以便您连接然后等待 HTTP 调用或其他一些函数与数据库交互。

    我可以从我的 HTML 页面调用脚本吗?

    当然。在您的 node.js 应用程序中,我将构建一个 Web 服务器来侦听某些 HTTP 调用。在您的 HTML 中,提供指向您的应用程序正在侦听的 Web 服务器的 GET、POST 等链接或表单。

    例如,您的前端可能看起来像<form action="/document/add" method="post">。然后,保留main.js 作为在 node.js 上运行的后端代码,但修改它以侦听对/document/add 的 POST 调用。当调用该 URL 时,使用 POST 表单数据运行插入代码。

    您还可以创建一个 AJAX 解决方案来监听表单提交并在后台提交 POST,等待响应,并相应地更新页面。

    与将其重新设计成客户端-服务器结构相比有哪些缺点?

    优点和缺点将取决于您要创建的应用程序类型。

    我认为完成上面的正确做法是在远程服务器上创建一个带有 nodejs 的 http 服务器,它将客户端的请求传递给 mongodb 驱动程序。我说的对吗?

    你是对的。这是使用 node.js 和 MongoDB 的标准做法。我将推荐Express 创建您的 API 以与数据库交互。它提供开箱即用的 URL 路由等功能。但是,您可以构建自己的平台,或使用适用于您的应用程序/环境的任何其他平台。

    【讨论】:

    • 非常感谢。我的第二个问题的意思是如何将node main.js 与我的前端集成?我已经尝试将main.js nodejs 代码复制并粘贴到我的前端 javascript 但没有运气。
    • 我明白了。我更新了对问题 2 的回答。希望对您有所帮助。
    • 对不起,我真的很难解释我真正想问的问题。假设我有一个属于我的网站 frontend.js 的 js,并且在里面定义了一个 var fields = getInputTexts()fields varialbe 正在由我的网站的输入文本填充。我想把它发送到 mongodb;为什么我不能复制main.js 并在那里使用fields?在命令行我们只需输入node,但在浏览器上呢?我需要在服务器上运行我的 nodejs 并一直监听吗?
    • 是的,你让你的 main.js 应用程序一直在服务器上运行,监听你的前端代码将进行的 HTTP 调用。将数据库接口代码放在前端会是一个巨大的安全漏洞。
    【解决方案3】:

    您应该为 MongoDB 使用 REST 接口。我非常喜欢sleepy.mongoose。它在 python 上运行,设置可能需要一分钟,但值得付出努力。

    Here is a blog by the author 帮助我入门。

    【讨论】:

      【解决方案4】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        • 2016-07-01
        • 2019-05-20
        • 2017-03-17
        • 2018-06-14
        • 2014-11-23
        • 2016-09-16
        相关资源
        最近更新 更多