zic*_*ero 6 collections ejs mongodb node.js express
我正在使用Node.JS,Express,MongoDB和EJS.我有一个关于一个数据库下的多个MongoDB集合的问题,并调用它们在前端使用.我有3个集合,经过大量研究后未发现如何调用多个集合而没有错误.
我知道将一切存储在一个集合下并不是一个问题,但我觉得最好的方法是按类别将它们分开.这是我的db/collection调用:
app.use(express.bodyParser());
var MongoClient = require('mongodb').MongoClient;
app.get('/', function(req, res){
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
if(!err) {
console.log("We are connected");
}
db.collection("portfolio", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
var portfolio = [];
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
portfolio[i] = result[i];
}
res.render('index.html', {portfolio: portfolio});
}
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
我怎么能多次调用其他集合,例如"约"集合等?我尝试添加另一个......
db.collection("about", function(err, collection) {
Run Code Online (Sandbox Code Playgroud)
...内...
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
Run Code Online (Sandbox Code Playgroud)
...但它在终端控制台日志中给出了错误.
提前致谢.
编辑:
这是我正在尝试做的,这给了我一个错误:
app.get('/', function(req, res){
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
if(!err) {
console.log("We are connected");
}
db.collection("portfolio", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
var portfolio = [];
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
portfolio[i] = result[i];
}
res.render('index.html', {portfolio: portfolio});
}
});
});
// Here's the additional collection call:
db.collection("about", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
var about = [];
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
about[i] = result[i];
}
res.render('index.html', {about: about});
}
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
这是控制台的错误:
ReferenceError: /Volumes/Files/WebDev/RHC/michael/michael/views/index.html:62
60| <div class="row-fluid">
61| <ul id="work" class="thumbnails">
>> 62| <% for(i=0; i<portfolio.length; i++) { %>
63| <% if (portfolio[i].proj_type == "work") { %>
64| <% var newLine = ""; %>
65| <% var fancyBox = ""; %>
portfolio is not defined
Run Code Online (Sandbox Code Playgroud)
因此我在名为"michael"的数据库下的MongoDB中有两个集合,我试图在一个MongoClient.connect()下调用它们.然后我将结果发送到两个阵列的前端(通过EJS):"portfolio"和"about".看来,当我这样做时,它会使"投资组合"变得不确定.希望有道理.
好的,使用aesede的解决方案加上我自己的修修补补,我得到了它来渲染两个集合。它可能需要一些技巧,但这是我得到的:
// GLOBAL ARRAYS FOR STORING COLLECTION DATA
var collectionOne = [];
var collectionTwo = [];
app.get('/', function(req, res){
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
if(!err) {
console.log("We are connected");
}
db.collection("collectionOne", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
collectionOne[i] = result[i];
}
}
});
db.collection("collectionTwo", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
collectionTwo[i] = result[i];
}
}
});
});
// Thank you aesede!
res.render('index.html', {
collectionOne: collectionOne,
collectionTwo: collectionTwo
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
我发现的唯一错误本身就是Node重新启动并在浏览器中单击“刷新”时,我没有看到HTML呈现任何内容。但是,随后进行的任何刷新都会始终显示内容。
| 归档时间: |
|
| 查看次数: |
13435 次 |
| 最近记录: |