Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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
Javascript 如何自动创建REST API node.js/MongoDB_Javascript_Node.js_Mongodb_Rest - Fatal编程技术网

Javascript 如何自动创建REST API node.js/MongoDB

Javascript 如何自动创建REST API node.js/MongoDB,javascript,node.js,mongodb,rest,Javascript,Node.js,Mongodb,Rest,我正在运行一个node.js服务器,它处理REST Api调用。 这些调用的响应将是一个或一个MongoDB对象列表(JSON) 我已经阅读了有关参数以及如何处理它们的内容。但有没有办法自动做到这一点 假设我有一个用户集合: name: String, hobby: String, age: Number 现在,我想获得年龄=18岁的所有用户的列表 我知道我可以恢复如下参数: url: http://localhost:3000/user?age=18&hobby=something

我正在运行一个node.js服务器,它处理REST Api调用。 这些调用的响应将是一个或一个MongoDB对象列表(JSON)

我已经阅读了有关参数以及如何处理它们的内容。但有没有办法自动做到这一点

假设我有一个用户集合:

name: String,
hobby: String,
age: Number
现在,我想获得年龄=18岁的所有用户的列表

我知道我可以恢复如下参数:

url: http://localhost:3000/user?age=18&hobby=something

var app = express();
app.get('/user', function (req,res) {

    var age=req.query.age;
    var hobby=req.query.hobby;

    mondodbUser.find(...);
}
但是假设用户有10个不同的属性,我有15个不同的集合。我不能动态地这样做吗?所以我不必恢复所有可能的参数

我希望能够以使用所有给定参数的方式搜索MongoDB


我希望我能表达得足够好:D谢谢

因为
req.query
在解析查询字符串后返回一个JS对象,该对象将在查询字符串中定义属性,例如:

/user?name=andrew&age=22

req.query
将返回对象
{name:“andrew”,age:“22”}

因此,只要对象中的属性与基础集合文档模式匹配,它就可以用作
find()
方法参数

然后,您可以执行以下操作:

app.get('/user', function (req, res) {
    User.find(req.query, function (err, users){ ... });
}

假设用户有10个不同的属性,我有15个不同的集合,你能澄清一下吗?我不想手动从URI恢复每个参数,并在mongoDB的find()方法中使用它,而只是调用find()方法使用URI中给定的任何参数。也许我想得太多了,我可以尝试检索每个参数并将其交给find方法,即使它为NULL/未定义?那么为什么不能只执行
User.find(req.query,cb)
由于
req.query
对象将只具有查询字符串中定义的属性,不能多也不能少。我可以!谢谢这就是我不知道的:D也许我应该读更多关于mongoDB find和req.query的内容,而不是尝试为restapi寻找示例!你可以加一个答案,如果你愿意,我会把它标为正确的。我不确定这是什么。