在mongoose中使用嵌入模式的express传入多个复杂查询,以将其呈现为ejs文件,可以按照以下步骤进行操作:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
mongoose.connect('mongodb://localhost/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => {
console.log('Connected to MongoDB');
})
.catch((error) => {
console.error('Error connecting to MongoDB', error);
});
const userSchema = new mongoose.Schema({
name: String,
age: Number,
email: String
});
const User = mongoose.model('User', userSchema);
app.get('/', (req, res) => {
const query1 = User.find({ age: { $gte: 18 } }).sort({ name: 1 });
const query2 = User.find({ email: { $regex: /gmail.com$/ } }).limit(10);
Promise.all([query1.exec(), query2.exec()])
.then(([result1, result2]) => {
res.render('index', { users1: result1, users2: result2 });
})
.catch((error) => {
console.error('Error executing queries', error);
res.status(500).send('Internal Server Error');
});
});
在上述代码中,我们定义了两个复杂查询query1和query2,分别表示年龄大于等于18岁的用户按姓名升序排列,以及邮箱以gmail.com结尾的前10个用户。使用Promise.all()方法来并行执行这两个查询,并在查询完成后将结果传递给ejs模板。
<!DOCTYPE html>
<html>
<head>
<title>User List</title>
</head>
<body>
<h1>Users with age >= 18:</h1>
<ul>
<% users1.forEach(function(user) { %>
<li><%= user.name %> - <%= user.age %> years old</li>
<% }); %>
</ul>
<h1>Users with gmail.com email:</h1>
<ul>
<% users2.forEach(function(user) { %>
<li><%= user.name %> - <%= user.email %></li>
<% }); %>
</ul>
</body>
</html>
在上述ejs模板中,我们使用了ejs的模板语法来遍历查询结果并将其呈现为HTML列表。
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
app.listen(3000, () => {
console.log('Server started on port 3000');
});
在上述代码中,我们将ejs设置为模板引擎,并指定视图目录为项目根目录下的views文件夹。然后,我们启动服务器并监听3000端口。
现在,当访问根路径(例如http://localhost:3000/)时,express将执行多个复杂查询,并将结果传递给ejs模板进行渲染,最终呈现为包含查询结果的HTML页面。
领取专属 10元无门槛券
手把手带您无忧上云