gpt4 book ai didi

javascript - 执行查询时返回 undefined object

转载 作者:搜寻专家 更新时间:2023-10-31 23:39:42 24 4
gpt4 key购买 nike

我正在 Node.js 上构建一个应用程序,它通过 Mongoose 与 MongoDB 一起工作。连接完美,我可以添加新文档,问题肯定不在连接上。

我正在一个单独的 .js 文件中构建与 mongoose 一起使用的所有函数,我从 dbconfig.js 调用它。

dbconfig.js

const mongoose = require('mongoose');

// Models
const User = require('./models/User');
const Category = require('./models/Category');

var database_name = "htm";
mongoose.Promise = global.Promise;

// Connection with database_name
var connect = () => {
mongoose.connect("mongodb://localhost/"+database_name, {useNewUrlParser: true}).then(() =>{
console.log("Conectado ao database: " + database_name);
}).catch((erro) => {
console.log("Erro ao se conectar ao database: " + database_name +" - "+ erro);
});

mongoose.model('users', User);
mongoose.model('categories', Category);
}

var getCategory = () => {
const Ref = mongoose.model('categories');
Ref.find().then((categories) => {
return categories;
})
}

module.exports = {
connect: connect,
getCategory: getCategory
}

问题出在getCategory()函数上,当我在我的app.js(我这个项目node.js的主文件)中调用它时,它只返回undefined。我知道变量类别已填写,因为我插入了 console.log (categories); 并得到以下结果:

[ { _id: 5c7ea6fb91526418ec3ba2fd,
name: 'UNHAS',
slug: 'unhas',
__v: 0 } ]

app.js

const express = require('express');
const app = express();
const categoriesRouter = require('./routes/categories');
const handlebars = require('express-handlebars');
const path = require('path');
const configDB = require('./dbconfig')

// Config
// Template Engine
app.engine('handlebars', handlebars({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');

// Start Database Connection
configDB.connect();

// Public
app.use(express.static(path.join(__dirname, "public")));

// Routes
app.use('/categorias', categoriesRouter);

app.get('/', (req, res) => {
var categories = configDB.getCategory();

res.render('home', categories);

});

app.listen(3001, () =>{
console.log("Servidor iniciado na porta 3001");
});

每当我的 app.js 中收到变量类别时,它就会以未定义的形式到达。

有人可以帮助我吗?

最佳答案

您没有在 Express 路由器中正确使用从 getCategory() 返回的 Promise 对象:

    app.get('/', (req, res) => {
var categories = configDB.getCategory(); <-- this is a Promise, not a synchronous value
res.render('home', categories);
});

相反,您可以使用 async/await 来帮助弥合当前同步代码与您拥有的基于异步 Promise 的数据库接口(interface)之间的差距:

    app.get('/', async (req, res) => {
var categories = await configDB.getCategory();
res.render('home', categories);
});

关于javascript - 执行查询时返回 undefined object ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55009311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com