2017-04-15 106 views
0

我正在使用mongdb並擁有用戶數據庫。我希望允許用戶根據用戶名搜索其他用戶的數據庫。到目前爲止,我已經嘗試過,並沒有實現這個目標。在Mongodb數據庫中搜索用戶

這裏是我的前端HTML:

<h1>Search Users</h1> 

<form class="form-inline" method="POST" action="https://stackoverflow.com/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> 

而且在app.js我的服務器端代碼:

// Seach Page 
app.get('/', function(req, res, next){ 
    res.render('searchusers'); 
}); 

// Search Processing 
app.post('/users/search', function(req, res, next){ 
    var query = req.body.user_query; 

    var result = db.users.findOne({"username":"user_query"}) 

    console.log('Searched for user: '+result); 
}); 

我的集合中存儲的用戶被稱爲「用戶」數據庫。每當我打電話db.users.findOne({"username":user_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) 

我可以做不同的,這樣,當用戶搜索的形式輸入用戶名,結果將在網頁上顯示什麼?謝謝。

+0

看起來像'db'對象中沒有定義屬性'users'。它在程序的其他部分工作嗎? –

+0

這是目前使用它的程序的唯一部分。我如何在我的db對象中定義用戶? – jblew

+0

如果你想以這種方式使用它,你需要擴展你的db對象。但對我來說這不是一個好主意 –

回答

0

您應該先建立與MongoDB的連接。你可以找到一個指南,例如here

findOne函數中,您可以找到用戶名爲「user_query」的文檔。你必須用正確的名字替換正確的結果。

作爲建議,您應該使用例如user_name而不是user_query以獲取更多可讀代碼。

+0

是的,我用'mongoose.connect('mongodb:// localhost/mobiusapp')在app.js中連接了我的mongodb; var db = mongoose.connection;' – jblew

+0

我不完全明白你說的「正確結果的正確名稱」的意思。 – jblew

+0

我的意思是「專有名稱」作爲您正在查找的用戶的名稱。例如,爲了找到Alice,你應該寫'db.users.findOne({「username」:「Alice」})''。 –

0

假設數據庫連接已成功建立,您可以通過mongo shell檢查集合是否存在嗎?

shell中的一個簡單的「db.users.find()」或「show collections」會顯示用戶集合是否存在。如果沒有,你將需要通過db.createCollection(「users」)創建集合。

+0

我有一個名爲「用戶」的集合。目前,爲了測試和開發,它有2個用戶。我只是無法訪問它並從數據庫中提取特定用戶 – jblew