对于mongo来说,我一直在检查示例数小时,试图检查此集合中是否存在用户:
{ "name" : "chrispy", "pass" : "xxxx", "_id" : ObjectId("5221b29b69f9e9b11a000001") }
但是无法匹配名称并得到结果,我尝试了很多例子,没有运气。
在控制台中运行良好:
mongo main
> db.users.findOne({name : 'chrispy'})
{
"name" : "chrispy",
"pass" : "xxxx",
"_id" : ObjectId("5221b29b69f9e9b11a000001")
}
>
一旦我可以匹配名称,我将匹配密码。但是甚至无法匹配用户名。帮助= 1000谢谢你!
var name = 'chrispy';
var pass = '';
console.log("About to check for name and pw");
Mongo.connect('mongodb://127.0.0.1:27017/main', function(err, db) {
if(err) throw err;
var collection = db.collection('users');
// does user exist
var doc = collection.findOne({name : name}, function(err,doc){
if(err) throw err;
if(doc)
console.log("1 Found: "+name+", pass="+doc.pass);
else
console.log("1 Not found: "+name);
});
if(doc)
console.log("2 Found: "+name+", pass="+doc.pass);
else
console.log("2 Not found: "+name);
db.close();
});
控制台输出:
About to check for name and pw
2 Not found: chrispy
它似乎没有进入findOne()函数,在findOn()函数外部它无论如何都会失败。
答案 0 :(得分:0)
所以这里是开始工作之前的更改,删除了var Doc =,并且只有在findOne()中的函数被触发后才关闭数据库,否则它会在结果之前关闭数据库。
var name = 'chrispy';
var pass = '';
console.log("About to check for name and pw");
Mongo.connect('mongodb://127.0.0.1:27017/main', function(err, db) {
if(err) throw err;
var collection = db.collection('users');
// does user exist
collection.findOne({name : name}, function(err,doc){
if(err) throw err;
if(doc)
console.log("Found: "+name+", pass="+doc.pass);
else
console.log("Not found: "+name);
db.close();
});
});
答案 1 :(得分:0)
请清楚一点,各种数据库调用是利用Javascript Promises的异步操作。对findOne的调用返回Promise对象,而不是找到的文档。也就是说,
app.get('/uploadimage', function(request, response){
if(request.cookies.sessionid == request.session.id){
response.render("uploadimage.hbs", {layout:'mainlogedin.hbs', token:request.csrfToken()})
}else{
response.render("uploadimage.hbs", {token:request.csrfToken()})
}
})
<form method="POST" action="/addimage" enctype="multipart/form-data">
<div class="form-group">
<label for="headline">Headline</label>
<input class="form-control" type="text" id="headline" name="headline" required>
</div>
<div class="form-group">
<label for="image" required>Choose a image</label>
<input type="file" class="form-control-file" id="image" name="image" value="upload image" required accept="image/x-png,image/jpeg">
</div>
<input type="hidden" name="_csrf" value="{{token}}">
<button type="submit" class="btn btn-primary mb-2">Create</button>
</form>
在功能上等同于
collection.findOne(
{name: name},
function(err,doc) {
/* handle err or process doc */
}
);
您的代码正在启动异步findOne调用,然后在调用完成之前关闭数据库(即,承诺已解决或被拒绝)。如果需要关闭数据库,则应在获取文档后在回调中进行操作。