要从javascript访问mongodb + nodjs吗?

时间:2018-11-14 18:17:24

标签: javascript node.js mongodb

我正在使用nodejs + mongodb运行服务器:

let MongoClient = require('mongodb').MongoClient.connect("mongodb://localhost:27017/mydb", { useNewUrlParser: true } ),

(async () =>{
   let client;
   try {
      client = await MongoClient;
      ...

我正在创建一些数据可视化,我需要一种简单的方法来从javascript访问后端数据,这可能吗?理想情况下,我想要完全访问权限。

2 个答案:

答案 0 :(得分:3)

您必须搭建一座桥梁,例如使用REST API:

 // server.js
 // npm install express, body-parser, mongodb
 const app = require("express")();
 const bodyParser = require("body-parser");
 const db = require("mongodb").MongoClient.connect(/*...*/);

 app.use(bodyParser.json());

 app.post("/findOne", async (req, res) => {
  try {
   const connection = await db;
   const result = await connection.findOne(req.body);
   if(!result) throw new Error("Not found!");
   res.status(200).json(result);
  } catch(error) {
   res.status(500).json(error);
  }
 });

 // ... all those other methods ...

 app.listen(80);

这样,您可以轻松地在客户端上连接到它:

 // client.js
 function findOne(query) {
   const result =  await fetch("/findOne/", {
     method: "POST",
     body: JSON.stringify(query),
     headers:{
      'Content-Type': 'application/json'
     }
   });

   if(!result.ok) throw await result.json();

   return await result.json();
}

注意:我希望您知道,如果您没有正确验证请求/添加身份验证,还可以允许一些陌生人使用数据库。

答案 1 :(得分:1)

出于安全目的,您应该从不执行此操作,但是假设您可以在节点应用程序上制作一个AJAX终结点或WebSockets服务器,将输入直接传递给mongoDB并将输出直接返回给客户端

使用AJAX请求或WS编写简单的API以防止用户破坏您的数据库是一种更好的做法。