Node.js Mongoose是否使用用户输入在数据库中使用express.js查找结果?
我对mongoose/mongo和express是新手,所以我不知道该怎么做。因此,基本上我尝试使用复选框对数据库中的结果进行排序 下面是my db中的一个示例:Node.js Mongoose是否使用用户输入在数据库中使用express.js查找结果?,node.js,mongodb,forms,express,mongoose,Node.js,Mongodb,Forms,Express,Mongoose,我对mongoose/mongo和express是新手,所以我不知道该怎么做。因此,基本上我尝试使用复选框对数据库中的结果进行排序 下面是my db中的一个示例: { "location" : "PHARMACY", "region" : "SOCAL", "system" : "WITS", "contact" : "SMITH", "membership" : "TIER1" } 到目前为止,我只知道如何像这样硬编码,在这里我做了Environment.find({region:“SOCA
{ "location" : "PHARMACY",
"region" : "SOCAL",
"system" : "WITS",
"contact" : "SMITH",
"membership" : "TIER1" }
到目前为止,我只知道如何像这样硬编码,在这里我做了Environment.find({region:“SOCAL”})
,它将包含SOCAL作为一个区域的所有db条目吐出:
var express = require("express"),
app = express(),
mongoose = require("mongoose"),
bodyParser = require("body-parser");
mongoose.connect("mongodb://localhost/epims", {
useNewUrlParser: true,
useUnifiedTopology: true
});
app.use(bodyParser.urlencoded({ extended: true }));
app.set("view engine", "ejs");
//schema setup
var environmentSchema = new mongoose.Schema({
name: String,
region: String,
system: String,
contact: String,
membership: String,
});
var Environment = mongoose.model("Environment", environmentSchema);
app.get("/environments/show", function(req, res) {
//find environment with selected parameters
Environment.find({region: "SOCAL"}, function(err, foundEnvironment) {
if (err) {
console.log(err);
} else {
//render show template with that env
res.render("show", { environment: foundEnvironment });
}
});
});
如何使数据库中的搜索根据所做的选择而改变
这是我的选择表,如果有人也需要看的话
<form action="/environments" method="GET">
<legend>Locations</legend>
<input type="checkbox" name="location" value="PHARMACY">
<label for="PHARMACY">PHARMACY</label>
<input type="checkbox" name="location" value="OFFICE">
<label for="OFFICE">OFFICE</label>
<input type="checkbox" name="location" value="STORE">
<label for="STORE">STORE</label>
<legend>Regions</legend>
<input type="checkbox" name="region" value="SOCAL">
<label for="SOCAL">SOCAL</label>
<input type="checkbox" name="region" value="NORCAL">
<label for="NORCAL">NORCAL</label>
<input type="checkbox" name="region" value="WA">
<label for="WA">WA</label>
...
<a href="/environments/show">Submit</a>
</form>
位置
药房
办公室
贮藏
区域
索卡尔
诺卡尔
华盛顿州
...
您可以通过搜索查询传递搜索参数:
/environments/show?位置=办公室和位置=商店和地区=SOCAL和地区=NORCAL
GET
请求生成此数据库查询:
{
region: { '$in': [ 'SOCAL', 'NORCAL' ] },
location: { '$in': [ 'OFFICE', 'STORE' ] }
}
app.get(“/environments/show”,函数(req,res){
设region=[req.query.region | |[]].flat();
let location=[req.query.location | |[]]flat();
让查询={
地区:{
“$in”:区域
},
地点:{
“$in”:位置
}
};
查找(查询,函数(err,foundEnvironment){
如果(错误){
控制台日志(err);
}否则{
//使用该环境渲染显示模板
res.render(“show”,{environment:foundEnvironment});
}
});
});代码>
位置
药房
办公室
贮藏
区域
索卡尔
诺卡尔
华盛顿州
...
提交
您可以通过搜索查询传递搜索参数:
/environments/show?位置=办公室和位置=商店和地区=SOCAL和地区=NORCAL
GET
请求生成此数据库查询:
{
region: { '$in': [ 'SOCAL', 'NORCAL' ] },
location: { '$in': [ 'OFFICE', 'STORE' ] }
}
app.get(“/environments/show”,函数(req,res){
设region=[req.query.region | |[]].flat();
let location=[req.query.location | |[]]flat();
让查询={
地区:{
“$in”:区域
},
地点:{
“$in”:位置
}
};
查找(查询,函数(err,foundEnvironment){
如果(错误){
控制台日志(err);
}否则{
//使用该环境渲染显示模板
res.render(“show”,{environment:foundEnvironment});
}
});
});代码>
位置
药房
办公室
贮藏
区域
索卡尔
诺卡尔
华盛顿州
...
提交
您需要API代码方面的帮助吗?那么从这个表单中,输入是如何流向API端点的呢?正如我看到的,这是一个GET端点,这些输入是否作为查询参数流动?如果是,那么您可以获取这些值并形成DB事务的查询。您可以发布您的整个服务器代码吗?如果要解析get请求的任何主体(例如,用于express的json中间件),则应使用url中的搜索查询。在get请求中,不应发送正文/数据,因为get请求不应基于正文数据进行处理。要使用正文时,可以使用POST
或任何其他方法payload@Marc嘿,是的,很抱歉,我使用了bodyparser,刚刚添加了上面的服务器代码!即使我只是想从数据库中检索信息,也会使用POST请求吗?@Emily,你想用什么就用什么。当您只想获取一些数据时,Get是非常好的。如果要将某些数据从客户端传输到服务器,请使用PUT或POST。请看一下REST规范,以便更好地理解API代码是否需要帮助?那么从这个表单中,输入是如何流向API端点的呢?正如我看到的,这是一个GET端点,这些输入是否作为查询参数流动?如果是,那么您可以获取这些值并形成DB事务的查询。您可以发布您的整个服务器代码吗?如果要解析get请求的任何主体(例如,用于express的json中间件),则应使用url中的搜索查询。在get请求中,不应发送正文/数据,因为get请求不应基于正文数据进行处理。要使用正文时,可以使用POST
或任何其他方法payload@Marc嘿,是的,很抱歉,我使用了bodyparser,刚刚添加了上面的服务器代码!即使我只是想从数据库中检索信息,也会使用POST请求吗?@Emily,你想用什么就用什么。当您只想获取一些数据时,Get是非常好的。如果要将某些数据从客户端传输到服务器,请使用PUT或POST。为了更好地理解,请看一下REST规范