首页 > 解决方案 > 如果每个记录都包含 nodejs 和 mongoose 中的值,则查找记录列表

问题描述

如果包含搜索值,则编写此函数用于查找用户。

async SearchUser(type, value) {
try {
  let objr=`${type}: ${value}`;
  return await User.find({objr}).exec();
}catch(err){
console.log("SearchUser -> err", err)

  }
}

例如我想用 phoneNumber 搜索,我发送这个请求:

http://localhost:3000/admin/Manager/SearchUser/phoneNumber/091598

我想向我显示电话号码包含的用户列表091598

或者可能想用 userName 搜索用户:

    http://localhost:3000/admin/Manager/SearchUser/userName/adm

我想向我显示用户名包含的用户列表admn

当我运行使用此代码时,它不会向我显示任何内容,但在数据库中我有包含此条件的记录。

有什么问题 ?我该如何解决这个问题????

标签: javascriptnode.jsmongoose

解决方案


objr您在函数内部创建的方式SearchUser不正确。

我建议更改您在服务器上处理搜索功能的方式,正如您所提到的那样,您必须为相同的find功能创建单独的路由。

使用基于查询的路由(此处有更多信息),如下所示

http://localhost:3000/admin/Manager/SearchUser?phoneNumber=091598

所以在服务器上你可以访问req对象上的这个值req.query,你会得到一个对象

console.log(req.query);
//output
{
   "phoneNumber": "091598"
}

您还可以在此处传递多个查询,例如

http://localhost:3000/admin/Manager/SearchUser?phoneNumber=091598&userName=adm

你的对象会有

console.log(req.query);
//output
{
   "phoneNumber": "091598"
   "userName": "adm"
}

现在您可以将整个req.query对象传递给SearchUser函数并直接在内部使用它User.find()

伪示例:

router.get('/admin/Manager/SearchUser/', (req, res) => {
   const searchParams = req.query;
   console.log(searchParams); // check your params here
   
   const users = SearchUser(searchParams);
   return users;
});

const SearchUser = async(params) => {
  try {
    return await User.find(params).exec();
  }catch(err){
    console.log("SearchUser -> err", err);
  }
}

API URL 示例: http://localhost:3000/admin/Manager/SearchUser?phoneNumber=09159


推荐阅读