Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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 在Mongodb数据库中搜索用户_Javascript_Jquery_Mongodb_Express - Fatal编程技术网

Javascript 在Mongodb数据库中搜索用户

Javascript 在Mongodb数据库中搜索用户,javascript,jquery,mongodb,express,Javascript,Jquery,Mongodb,Express,我使用的是mongdb,有一个用户数据库。我希望允许用户根据用户名在数据库中搜索其他用户。到目前为止,我已经试过了,但没有成功 以下是我的前端HTML: <h1>Search Users</h1> <form class="form-inline" method="POST" action="/users/search"> <div class="form-group"> <input type="text" name="use

我使用的是mongdb,有一个用户数据库。我希望允许用户根据用户名在数据库中搜索其他用户。到目前为止,我已经试过了,但没有成功

以下是我的前端HTML:

<h1>Search Users</h1>

<form class="form-inline" method="POST" action="/users/search">
  <div class="form-group">
    <input type="text" name="user_query" class="form-control" placeholder="Find Users By Username...">
  </div>
  <button type="submit" class="btn btn-primary">Search</button>
</form>
我在数据库中存储用户的集合称为“用户”。每当我调用
db.users.findOne({“username”:user\u query})
提交表单后,我会收到一个错误,如下所示:

TypeError: Cannot read property 'findOne' of undefined
    at /Users/joshuablew/Desktop/MobiusApp/app.js:86:24
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:275:10)
    at /Users/joshuablew/Desktop/MobiusApp/app.js:74:3
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:317:13)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:275:10)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/connect-flash/lib/flash.js:21:5
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:317:13)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:275:10)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/express-validator/lib/express_validator.js:355:5
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)

我可以做些什么不同的事情,以便当用户在表单中搜索用户名时,结果将显示在网页上?谢谢。

您应该先建立到MongoDB的连接。例如,你可以找到一本指南

findOne
功能中,您可以找到用户名为“user\u query”的文档。您必须用正确的名称替换正确的结果


作为建议,您应该使用例如
user\u name
而不是
user\u query
来获得更可读的代码。

假设数据库连接设置成功,您是否可以通过mongo shell检查集合是否存在


shell中的一个简单的“db.users.find()”或“show collections”将显示用户集合是否存在。如果没有,则需要通过db创建集合。createCollection(“users”)

看起来像
users
属性未在
db
对象中定义。它在程序的其他部分工作吗?这是程序目前唯一使用它的部分。如何在我的db对象中定义用户?如果希望以这种方式使用db对象,则需要扩展db对象。但对我来说,这不是一个好主意,你认为什么是最好的方法?因为这不是我项目中最好的想法,所以我基于db对象创建了单独的CRUD MongoDB包装器,以便只对一个表进行操作。然后我像
users.findOne({“username”:“user\u query”})一样使用它
;是的,我在app.js中用
mongoose.connect()连接了我的mongodbmongodb://localhost/mobiusapp'); var db=猫鼬连接我不太明白你说“正确结果的正确名称”是什么意思。我的意思是“正确名称”是指你正在寻找的用户的名称。例如,为了找到Alice,您应该编写
db.users.findOne({“username”:“Alice”})
。好的,是的,这就是我想要的。但是每个查询都会针对不同的用户名,这就是为什么我在Alice所在的位置插入了一个变量,因为搜索的用户名总是不同的。请使用
req.body.user\u query
或其他变量,而不是包含用户名的字符串文字。我确实有一个名为“users”的集合。目前,为了测试和开发,它有2个用户。我只是在访问它和从数据库中提取特定用户时遇到问题
TypeError: Cannot read property 'findOne' of undefined
    at /Users/joshuablew/Desktop/MobiusApp/app.js:86:24
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:275:10)
    at /Users/joshuablew/Desktop/MobiusApp/app.js:74:3
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:317:13)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:275:10)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/connect-flash/lib/flash.js:21:5
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:317:13)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/index.js:275:10)
    at /Users/joshuablew/Desktop/MobiusApp/node_modules/express-validator/lib/express_validator.js:355:5
    at Layer.handle [as handle_request] (/Users/joshuablew/Desktop/MobiusApp/node_modules/express/lib/router/layer.js:95:5)