在 express api 中处理查询字符串的最佳方法是啥?

Posted

技术标签:

【中文标题】在 express api 中处理查询字符串的最佳方法是啥?【英文标题】:What is the best way to handle querystrings in an express api?在 express api 中处理查询字符串的最佳方法是什么? 【发布时间】:2019-03-02 00:07:57 【问题描述】:

我是一名初学者 nodejs 开发人员,致力于开发一个带有可选查询参数的 express rest api。

例如,考虑以下用户架构:

phone: 
  countryCode: String,
  number: phoneType
,
phoneVerified:  type: Boolean, default: false ,
emailVerified:  type: Boolean, default: false ,
rating: Number,
balance:  type: Number, default: 0 ,
occupation: String,
gender:  type: String, enum: genders ,

我想在 /users 上公开这个资源并允许通过可选的查询字符串进行查询。

例如,/users?emailVerified=true&phoneverified=false&gender=male&occupation=plumber&limit=10

这应该返回所有满足条件的用户,同时保持几乎所有选项都是可选的。

以可维护和面向未来的方式做到这一点的最佳方法是什么?

方法 1:我的第一种方法是使用 if 块来检查查询中存在哪些参数并相应地构建 mongoose 查询,但这看起来很难看且很难阅读。

queryObj = ;
if (req.query.occupation) 
  queryObject = 
    ...queryObject,
    occupation: req.query.occuption
  ;

if (req.query.phoneVerified) 
  queryObject = 
    ...queryObject,
    phoneVerified: req.query.phoneVerifed
  ;

const users = await User.find(queryObject);

我还发现了看起来很有希望的querymen package。如果有人有经验可以指导我什么是最佳做法?提前致谢

【问题讨论】:

【参考方案1】:

你以正确的方式做这件事。你也可以试试

queryObject = ;
if (req.query.params.occupation) 
    queryObject.occupation= req.params.occuption

if (req.params.phoneVerified) 
    queryObject.phoneVerified= req.params.phoneVerifed

const users = await User.find(queryObject);

您可以使用“.”向 json 添加新属性。

【讨论】:

以上是关于在 express api 中处理查询字符串的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Express 和 Nodejs:调用外部 API 的最佳方式

在 Express 请求中处理 Long I/O 操作的最佳实践

使用 Express 和 NodeJS 构建 REST API 的最佳实践

Express 开发与部署最佳实践

API设计与开发之最佳实践

处理查询字符串的最佳方法[关闭]