Javascript mongodb的问题';s collection.find()在express app.js文件中使用时

Javascript mongodb的问题';s collection.find()在express app.js文件中使用时,javascript,node.js,mongodb,express,routes,Javascript,Node.js,Mongodb,Express,Routes,只是一点背景:我对后端代码(node js,express js)非常陌生,所以请容忍我。。。我正在使用ExpressJS和mongodb构建一个网站和Shopify应用程序。该网站和Shopify应用程序都需要与同一个数据库通信(在本例中,我称之为tbapp)。因为在我决定尝试遵循git hub repo中编写的express js代码之前,我从未构建过Shopify应用程序。我注意到这个示例应用程序没有使用routes目录,因此没有考虑太多,我决定也不使用routes目录,并将所有“get”

只是一点背景:我对后端代码(node js,express js)非常陌生,所以请容忍我。。。我正在使用ExpressJS和mongodb构建一个网站和Shopify应用程序。该网站和Shopify应用程序都需要与同一个数据库通信(在本例中,我称之为tbapp)。因为在我决定尝试遵循git hub repo中编写的express js代码之前,我从未构建过Shopify应用程序。我注意到这个示例应用程序没有使用routes目录,因此没有考虑太多,我决定也不使用routes目录,并将所有“get”和“post”请求都放在app.js文件中。但是,与我的应用程序不同,示例应用程序没有在数据库中存储任何信息

现在来看实际的问题:我试图找出店主是否在他们的店铺管理员中输入了匹配的密钥,所以我使用了“collection.find”。当存储所有者输入正确的密钥时,这可以正常工作,但是每当他们输入不在我的数据库中的密钥时,函数都会返回一个错误–尽管我已经指定当“collection.find”找不到文档时,它应该呈现一个传递了局部变量的页面。下面是我的app.js文件中的相关代码。您认为在路由中不使用index.js文件会导致此问题吗?这是我能想到的唯一解释,因为我在我的网站上确实做了同样的事情,但唯一的区别是我的网站代码使用了路由

这是我的app.js文件中的初始代码:

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var crypto= require("crypto");
var querystring= require("querystring");
var request= require("request");
var session= require("express-session");

var mongo= require("mongodb");
var monk= require("monk");
var db= monk("localhost:27017/tbapp");


var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine("html", require("ejs").__express);
//changed renderFile

app.set('view engine', 'html');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({secret: 'somethingsecret', saveUninitialized: true, resave: true}));
app.use(express.static(path.join(__dirname, 'public')));

app.use(function(req, res, next){
   req.db= db;


    next();
});
这是问题代码:

app.post("/enter-store-key", function(req, res) {

    var db= req.db;
    var key= req.body.storeKey;
    var collection= db.get("businessOwners");

    console.log(key);
    collection.find({_id: key}, {}, function(err, doc) {
        if(err) {
            res.send("There was an error");
        } else {
            if(doc.length>0) {
               res.render("widg-index", {
               api_key: config.shopify_api_key,
               shop: config.shop,
               title: "Home",
               valid_key: "yes"
               }); 
            } else {
               res.render("widg-index", {
               api_key: config.shopify_api_key,
               shop: config.shop,
               title: "Home",
               valid_key: "no"
               }); 

        }
        }
    }); 

    //WHEN STORE OWNER DOESN'T INPUT A CORRECT KEY I GET AN ERROR PAGE??? IF FUNCTION "FIND" CANNOT FIND A DOCUMENT WITH SPECIFIED QUERY IT RETURNS AN ERROR?? WHYYYYYY????!!

});
感谢所有帮助我的人。我已经挣扎了一段时间,所以任何和所有的建议将不胜感激

试试这个:

collection.find({_id: key}).toArray(function (err, doc) {
  if (err) {
    console.log(err);
  } else if (doc.length) {
    console.log('Found:', docs);
  } else {
    console.log('No docs found');
  }
  db.close();
});

所以我终于明白我做错了什么。。。当我测试密钥是否正确时,我使用的是一个长度不超过24个字符的随机字母/数字字符串。问题是,对于mongodb的ID,它们必须是24个字符长,否则函数会抛出错误。

您是否打印出了实际的错误。您在
err
参数中得到的错误是什么?它是一个500错误。直到今天我才打印出真正的错误消息(愚蠢的我),我终于明白我做错了什么。所以谢谢你帮我到达那里:)