Node.js 如何接收mongodb代码以执行直接数据库更改
我想开发一个端点,它将接收MongoDB命令,并像robomongo那样直接在数据库上运行它们,然后返回结果。它可以是任何内容(插入、更新、读取、删除等)。我正在使用mongoose,所以可以通过mongoose或纯mongo代码来实现 我考虑过使用类似于:Node.js 如何接收mongodb代码以执行直接数据库更改,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我想开发一个端点,它将接收MongoDB命令,并像robomongo那样直接在数据库上运行它们,然后返回结果。它可以是任何内容(插入、更新、读取、删除等)。我正在使用mongoose,所以可以通过mongoose或纯mongo代码来实现 我考虑过使用类似于: let code = eval(stringOfMongoCode); db.eval(code); 但我想这一定是一种更好的方式,因为它从3.0版开始就被弃用了,而我现在使用的是mongo的3.6版 有什么办法吗 编辑1:这是我到目前为
let code = eval(stringOfMongoCode);
db.eval(code);
但我想这一定是一种更好的方式,因为它从3.0版开始就被弃用了,而我现在使用的是mongo的3.6版
有什么办法吗
编辑1:这是我到目前为止所做的。它可以工作,我可以运行数据库中的任何东西并用结果进行响应(我删除了一些代码):
我仍然希望改进我的代码,不使用
db.eval()
,并且能够返回任何结果。您所描述的内容实际上是一个错误。有一些通用的解决方案(开源或其他),或者您可以根据自己的需求构建自定义API。您肯定不想使用db.eval()
,因为这会带来严重的安全性和性能限制(并将在未来的MongoDB版本中删除)。但是,推荐一个特定的REST接口或库可能会导致堆栈溢出。@Stennie我已经有一个运行ExpressJS的REST API了。我想在这个API上构建一个通用端点,它可以直接在MongoDB上运行任何东西。我确实知道有关此功能的安全性,但我已经对此端点进行了强大的身份验证,并且只有技术管理员才能访问该端点。仔细想想,我需要的是一个web界面来管理数据库。
app.post('/v1/query', async function (req, res) {
try {
let code = `(function() { ${req.body.code} })`;
code = eval(code);
const mongoose = require("mongoose");
const db = mongoose.connection.db;
let result = await db.eval(code);
res.status(200);
return res.json(BaseController.buildResponse(true, 'Database code executed', null, result));
} catch (err) {
console.error(err);
res.status(500);
return res.json(BaseController.buildResponse(false, 'Error running your code on the database', err));
}
});