mongodb 的 collection.find() 在 Express app.js 文件中使用时出现问题
Issue with mongodb's collection.find() when used in an express app.js file
只是一点背景:我对后端代码(节点js,express js)很陌生,所以请耐心等待...我正在努力建立一个网站和一个 Shopify 应用程序使用express js和mongodb。网站和 Shopify 应用程序都需要与同一个数据库通信(在这种情况下,我称之为 tbapp)。由于我从未构建过 Shopify 应用程序,因此我决定尝试遵循在此 git 中心存储库中编写的快速 js 代码。我注意到这个示例应用程序没有使用路由目录,因此没有考虑太多,我决定也不使用路由目录,并将我所有的"get"和"post"请求都放在我的应用程序中.js文件中。但是,与我的应用程序不同,示例应用程序不会在数据库中存储任何信息......
现在对于实际问题:我试图找出店主是否在他们的商店管理员中输入了匹配的密钥——所以我使用"collection.find"。当商店所有者输入正确的键时,这工作正常,但是每当他们输入不在我的数据库中的键时,该函数都会返回错误——即使我已经指定当"collection.find"找不到文档时,它应该呈现一个页面,其中包含传递给它的局部变量。以下是我的应用程序.js文件中的相关代码。您是否认为在路由中不使用索引.js文件会导致此问题?这是我能想到的唯一解释,因为我在我的网站上确实在做同样的事情,但唯一的区别是我的网站代码使用的是路由。
这是我的应用程序.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 个字符,否则该函数会抛出错误。
- 关于引入外部javascript文件的问题&css通过https
- Javascript,文件输入和FormData问题
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- Express Routes-多个文件的问题
- 使用ajax在html中加载html文件时出现的问题
- 尝试从csv文件中检索单个值时出现问题
- 在javascript中检查文件扩展名的问题
- 加载本地json文件问题
- 外部JavaScript文件问题
- Java 程序文本文件问题
- Django + skelJS / 静态文件问题 / 对 CSS 中图像的引用
- 获取 JSON 文件问题
- Wordpress-自定义页面包括第二个导致函数文件问题的自定义页面
- 外部js文件问题
- 加载javascript文件问题
- JS prototype.namespace单独的文件问题
- 将bootstrap主题安装到Rails 4应用程序中- javascript文件问题
- AngularJS图表文件问题
- 流星客户端外部Javascript文件问题
- Javascript类方法加载json文件问题