我正在使用Express + MongoDB本机驱动程序(不是MONGOOSE),我想创建一个可以过滤'过滤的API端点。通过我的结果。
结构:
在我的组件中,我有30个"过滤器" (选择框),我在我的&xxxx'中有5000多个文件。集合以目录方式显示。每次用户点击提交时,我都想向MongoDB发送查询并将结果更新到我的目录。这可以通过服务+订阅来完成,这很好。我的问题是创建可以使用查询的API端点。
我有一个Angular组件,它有大约30个选择框,其中每个值都是查询字符串的一个片段。
考虑以下选择框:
<select name="test" form="myform">
<option value="{'name': 'Volvo'}">Volvo</option>
<option value="{'name': 'Honda'}">Honda</option>
</select>
<select name="test2" form="myform">
<option value="{'model': 'ILX'}">ILX</option>
<option value="{'model': 'MDX'}">MDX</option>
</select>
提交表单时,应传递以下查询以表达:
/filter/test/{{'name': 'Honda'},{'model': 'ILX'}}
这是我的快速端点(&#39;理想&#39;)代码(这会产生错误):
router.get('/filter/test/:query', function(req, res) {
var collection = db.get().collection('xxxxxx')
collection.find({ query }).toArray(function(err, docs) {
res.send(docs)
})
})
问题:
1.如何从此表单传递查询(或字符串)来表达? (我相信它是我提交按钮的动作标记中的API端点)
2.如何正确构建此API端点?
这样的东西在生产中是安全/安全吗?如果没有,我该如何保护它或什么是更好的实现?
答案 0 :(得分:1)
这取决于你正在开发什么。如果您的数据不是太敏感,请将其放入url params并发送get调用,如果数据是敏感的,请使用post或patch调用。这是其余的api为删除使用删除调用所做的事情,不要直接提交表单来休息api尝试使用ajax在幕后点击api。
创建一个这样的表单
<form action="/filter/test/{{test}}/{{model}}">
<select name="test" [(ngModel)]="test" form="myform">
<option [value]=" 'Volvo'">Volvo</option>
<option [value]="'Honda'">Honda</option>
</select>
<select name="test2" [(ngModel)]="model" form="myform">
<option [value]="'ILX'">ILX</option>
<option [value]="'MDX'">MDX</option>
</select>
</form>
并在api中阅读
router.get('/filter/test/:test/:model', function(req, res) {
var collection = db.get().collection('xxxxxx')
collection.find({ test : req.params.test, model : req.params.model }).toArray(function(err, docs) {
res.send(docs)
})
})
如果您有多个字段并且您有一个案例用户将填写其中一些而一些不使用补丁/帖子作为我的建议创建您的角度模型
let data = {
field1: "",
field2: "",
...
}
现在使用field1,field2和rest在你的表单模型中并使用ajax调用post / patch将这个数据对象直接修复到休息终点你不需要url params现在在req.body
中提取并验证它们你会找到它们。为此,您需要在nodejs中添加一个json解析器。