Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何接收mongodb代码以执行直接数据库更改_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 如何接收mongodb代码以执行直接数据库更改

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:这是我到目前为

我想开发一个端点,它将接收MongoDB命令,并像robomongo那样直接在数据库上运行它们,然后返回结果。它可以是任何内容(插入、更新、读取、删除等)。我正在使用mongoose,所以可以通过mongoose或纯mongo代码来实现

我考虑过使用类似于:

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));
    }
});