使用 NodeJS 和 Express 从 MongoDB 检索数据
Retrieving data from MongoDB using NodeJS with Express
好吧,所以在过去的几天里我开始弄乱 Node(因为我认为我应该学习一些实际有用的东西并且可能让我找到工作)。现在,我知道如何提供页面、基本路由等。好的。但是我想学习如何查询数据库中的信息。
现在,我正在尝试构建一个用作网络漫画网站的应用程序。因此,理论上,当我输入 url http://localhost:3000/comic/<comicid>
时,应用程序应该查询数据库
我的 app.js 文件中有以下代码:
router.get('/', function(req, res) {
var name = getName();
console.log(name); // this prints "undefined"
res.render('index', {
title: name,
year: date.getFullYear()
});
});
function getName(){
db.test.find({name: "Renato"}, function(err, objs){
var returnable_name;
if (objs.length == 1)
{
returnable_name = objs[0].name;
console.log(returnable_name); // this prints "Renato", as it should
return returnable_name;
}
});
}
通过此设置,我可以 console.log(getName())
在控制台中输出 "undefined",但我不知道 为什么 它没有获得唯一的元素查询实际上可以在数据库中查找。
我尝试在 SO 中搜索,甚至在 Google 中搜索示例,但没有成功。
我到底应该如何从对象中获取参数名称?
NodeJs 是异步的。您需要回调或 Promise.
router.get('/', function(req, res) {
var name = '';
getName(function(data){
name = data;
console.log(name);
res.render('index', {
title: name,
year: date.getFullYear()
});
});
});
function getName(callback){
db.test.find({name: "Renato"}, function(err, objs){
var returnable_name;
if (objs.length == 1)
{
returnable_name = objs[0].name;
console.log(returnable_name); // this prints "Renato", as it should
callback(returnable_name);
}
});
}
getName
函数正在使用 db.test.find
对 Mongo 进行异步调用。您可以通过在异步函数后添加 console.log
来查看。像这样:
function getName(){
db.test.find({name: "Renato"}, function(err, objs){
var returnable_name;
if (objs.length == 1) {
returnable_name = objs[0].name;
console.log(returnable_name);
return returnable_name;
}
});
console.log('test'); // <!-- Here
}
很可能,这将输出:
test
Renato
您需要为 getName
函数提供回调。
router.get('/', function(req, res) {
getName(function(err, name) {
res.render('index', {
title: name,
year: date.getFullYear()
});
})'
});
function getName(cb){
db.test.find({name: "Renato"}, function(err, objs){
if(err) cb(err);
var returnable_name;
if (objs.length == 1) {
returnable_name = objs[0].name;
return cb(null, returnable_name);
} else {
// Not sure what you want to do if there are no results
}
});
}
好吧,所以在过去的几天里我开始弄乱 Node(因为我认为我应该学习一些实际有用的东西并且可能让我找到工作)。现在,我知道如何提供页面、基本路由等。好的。但是我想学习如何查询数据库中的信息。
现在,我正在尝试构建一个用作网络漫画网站的应用程序。因此,理论上,当我输入 url http://localhost:3000/comic/<comicid>
我的 app.js 文件中有以下代码:
router.get('/', function(req, res) {
var name = getName();
console.log(name); // this prints "undefined"
res.render('index', {
title: name,
year: date.getFullYear()
});
});
function getName(){
db.test.find({name: "Renato"}, function(err, objs){
var returnable_name;
if (objs.length == 1)
{
returnable_name = objs[0].name;
console.log(returnable_name); // this prints "Renato", as it should
return returnable_name;
}
});
}
通过此设置,我可以 console.log(getName())
在控制台中输出 "undefined",但我不知道 为什么 它没有获得唯一的元素查询实际上可以在数据库中查找。
我尝试在 SO 中搜索,甚至在 Google 中搜索示例,但没有成功。
我到底应该如何从对象中获取参数名称?
NodeJs 是异步的。您需要回调或 Promise.
router.get('/', function(req, res) {
var name = '';
getName(function(data){
name = data;
console.log(name);
res.render('index', {
title: name,
year: date.getFullYear()
});
});
});
function getName(callback){
db.test.find({name: "Renato"}, function(err, objs){
var returnable_name;
if (objs.length == 1)
{
returnable_name = objs[0].name;
console.log(returnable_name); // this prints "Renato", as it should
callback(returnable_name);
}
});
}
getName
函数正在使用 db.test.find
对 Mongo 进行异步调用。您可以通过在异步函数后添加 console.log
来查看。像这样:
function getName(){
db.test.find({name: "Renato"}, function(err, objs){
var returnable_name;
if (objs.length == 1) {
returnable_name = objs[0].name;
console.log(returnable_name);
return returnable_name;
}
});
console.log('test'); // <!-- Here
}
很可能,这将输出:
test
Renato
您需要为 getName
函数提供回调。
router.get('/', function(req, res) {
getName(function(err, name) {
res.render('index', {
title: name,
year: date.getFullYear()
});
})'
});
function getName(cb){
db.test.find({name: "Renato"}, function(err, objs){
if(err) cb(err);
var returnable_name;
if (objs.length == 1) {
returnable_name = objs[0].name;
return cb(null, returnable_name);
} else {
// Not sure what you want to do if there are no results
}
});
}