Javascript 在Mongodb数据库中搜索用户
我使用的是mongdb,有一个用户数据库。我希望允许用户根据用户名在数据库中搜索其他用户。到目前为止,我已经试过了,但没有成功 以下是我的前端HTML: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
<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)