未加星标

Weird scope behavior in node or am I sleeping?

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二03 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

My js is as follows,

/* * GET home page. */ var MongoClient = require('mongodb'); exports.index = function(req, res){ var studentObj = {}; MongoClient.connect("mongodb://localhost:27017/MY_DB_TEST", function(err, db) { if(!err) { console.log("We are connected"); var collection = db.collection('test'); var stream = collection.find().stream(); stream.on("data", function(item){ studentObj = item; }); } }); res.render('index', { title: 'Express', obj: studentObj }); };

I try to render this page with jade , my syntax for that is,

h1 Name: #{obj.name}

My JSON : (fetched from mongodb)

{ name: "Ron", age: 24 }

This does not work, it only works if I keep my studentObj as a global variable i.e after the require statement.

Also, the obj.name is not rendered on first request, only for 2nd request onwards do I get the name property.

Why are these issues happening? am I missing something extremely trivial?

Problem courtesy of: ta-run

Solution

You're trying to treat async code as synchronous. Don't do that.

Here's your code:

// Declare local var var studentObj = {}; // fire off an async request MongoClient.connect("mongodb://localhost:27017/MY_DB_TEST", function(err, db) { // render, not waiting for data to arrive from server res.render('index', { title: 'Express', obj: studentObj });

This also explains the behaviour with global var. At first render it's still empty, but before second render the data request comes back and inits the global var. Solution is: render only after you got the data.

stream.on("data", function(item){ res.render('index', { title: 'Express', obj: item }); });

Solution courtesy of: Sergio Tulentsev

本文数据库(综合)相关术语:系统安全软件

分页:12
转载请注明
本文标题:Weird scope behavior in node or am I sleeping?
本站链接:https://www.codesec.net/view/611827.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(12)