Tag: callback

有没有更好的方法来处理Node.js / Expressjs中的嵌套callback?

我使用Node.js和Expressjs作为服务器端编码,MongoDB作为后端。 我是所有这些技术的新手。 我需要根据请求做一个动作列表。 例如在用户pipe理中 检查用户已经注册 如果注册重新发送激活电子邮件 如果没有注册,则从另一个表中获取userId,这将维护用户,资产等的ID。[我知道MongoDB提供独特的_id; 但我需要有一个唯一的整数ID为userId] 创build用户 发送成功或失败的回应。 为了实现这个我写了下面的代码: exports.register = function(req,res,state,_this,callback) { switch(state) { case 1: //check user already registered or not _this.checkUser(req, res, ( state + 1 ), _this, _this.register, callback); break; case 2: //Already registered user so resend the activation email _this.resendEmail(req, res, 200, _this, _this.register, callback); break; case 3: […]

如何在Node.js中完成所有Web抓取请求后才呈现页面?

我正在使用jsdom (Node.js的networking抓取库)在1到10个Web请求之间的任何地方。 它是这样的: app.get('/results', function(req, res) { jsdom.env( "http://website1.com", ["http://code.jquery.com/jquery.js"], function (errors, window) { // scrape website #1 } ); jsdom.env( "http://website2.com", ["http://code.jquery.com/jquery.js"], function (errors, window) { // scrape website #2 } ); jsdom.env( "http://website3.com", ["http://code.jquery.com/jquery.js"], function (errors, window) { // scrape website #3 } ); } res.render('results', { items: items }); } 在所有jsdom请求完成之后,我收集了所有我需要的信息之后,如何才运行res.render() ? […]

了解function(错误,数据)callback

所以我很困惑如何函数(err,数据)callback工作,是第一个参数总是一个error handling程序? 如果你有一些像函数(x,y,z,a,b,c)那么剩下的参数呢? fs.readFile中的数据如何从代码的第一行传递到代码的底部? 或换句话说,fs.readFile的输出如何被放入数据参数? fs.readFile(pathToFile, function (err, **data**) { bufferString = **data**.toString(); 我可以用函数(x,y)和函数(x,y,z,a,b,c)replace函数(err,data) 但只有第二个参数的作品(数据和Y),这只是JavaScript的callback语法? 例如,这是工作代码以asynchronous读取文件并打印给定文件的行数: var fs = require('fs'); var pathToFile = process.argv[2]; var bufferString, bufferStringSplit; function counter(callback) { fs.readFile(pathToFile, function (err, data) { bufferString = data.toString(); bufferStringSplit = bufferString.split('\n'); callback(); }); } function logMyNumber() { console.log(bufferStringSplit.length-1); } counter(logMyNumber);

节点callback; 其他块vs返回

我经常看到node.js程序员在调用需要callback的函数时,可以这样做: callSomeThing(arg1, arg2, function (err, data) { if(err) { // Handle the error case } else { // Proceed normally } }); 有没有技术上的原因,为什么他们使用一个else块,而不是在错误情况下返回还是只是一个代码风格的事情? callSomeThing(arg1, arg2, function (err, data) { if(err) { // Handle the error case return; } // proceed normally });

Meteor / Node.js:for循环中的多个http请求,在一个定时间隔内均匀分布?

尊敬的JS开发人员 – 我试图在一个Meteor应用程序中按时间间隔进行一批服务器端http请求,并根据收到的响应更新MongoDB数据库。 每15秒钟一批请求应该开始,并且请求的集合应该在15秒内均匀分布(而不是一次性地泛滥API服务器)。 为了均匀地传播请求,我试图使用setTimeout方法。 有两个参数在每个http请求之间改变,这些不同的值存储在两个单独的数组中。 而不是拼出每个http请求(如果您计算两个数组之间的所有组合,20 * 4 = 80),我已经在for循环中编写了一个for循环来大大整合代码。 对于每个响应,如果返回OK,则两个switch语句通过评估它的i和y值来处理响应的处理方式。 问题:我似乎在“回拨地狱”。 当响应从服务器到达时, i和/或y的值有时已经被循环系统增加了,所以我不能100%确定地用switch语句处理响应。 updatedb()函数最终对错误响应执行特定的计算(将它们存储在数据库中的错误位置)。 希望有人可以提供一些指导,我可以做不同的事情来解决这个问题,因为我在智慧的结尾。 PS我试图用recursion的方法做到这一点,但得到了Maximum call stack size exceeded错误。 test = function test(){ // API base URL var baseURL = "https://example.com/"; // Array1 var array1 = ['item1', // i = 0 'item2', // i = 1 'item3', // i = 2 'item4', […]

节点MySqlcallback多个查询

我遇到了一个问题,同时试图创build逻辑来添加行到我在MySql数据库上创build的新表。 当添加一行时,我需要查询数据库4次来检查其他行,然后将正确的值添加到新行。 我正在使用node.js和mysql模块来完成这一点。 在编码的时候,我碰到了一个障碍,代码并没有等待4个查询在插入新行之前完成,然后每次都给出值为0的值。 经过一番研究,我意识到一个callback函数会是这样的,看起来像这样: var n = 0; connection.query("select…", function(err, rows){ if(err) throw err; else{ if(rows.length === 1) ++n; } callback(); }); function callback(){ connection.query("insert…", function(err){ if(err) throw err; }); } 注意:select查询只能返回一个项目,所以if条件不应该影响这个问题。 只有一个查询等待的callback函数对我来说是很清楚的,但是对于多个查询等待,我有些迷失了方向。 我唯一的想法是在调用callback之前创build另一个增量variables,然后在callback函数的参数中传递。 然后在callback中,查询可以被if语句封装,条件是这个variables等于需要调用的查询的数量,这里是我的目的。 我可以看到这个工作,但不知道这种情况是否已经内置解决scheme,或者是否有其他更好的解决scheme已经开发。

如何调用函数一次forEach循环完成?

我必须根据条件sorting一些数据,并将其推送到新的数组sortedFiles ,所以基本上一旦forEach循环完成,我想调用asyncFiles()函数并将对象传递给它,但它不会发生在下面的代码。 任何想法是什么实施错误或任何更好的方法来实现这一任务? filesData是包含目录文件的对象。 ctrl.js if (searchObj.searchEnv === 'stat') { stDirectory.readDirectory(function(files) { filesData.logFiles.forEach(function(file) { var sortedFiles = []; var fileDate = new Date(file.fileDate).getTime(); searchStartDate = new Date(searchStartDate).getTime(); searchEndDate = new Date(searchEndDate).getTime(); if (fileDate – searchStartDate > 0 && searchEndDate – fileDate > 0) { console.log('File Date', file); sortedFiles.push(file); } }, function() { console.log(filesData.logFiles); filesData.logFiles = […]

NodeJS – callback不执行

在这种情况下,我执行一个函数(getAvailableLabs)之后 – 我想执行callback或承诺。 我不知道我应该执行哪一个,但是我不能得到任何工作。 路线: router.get('/api/content_left', function(req, res, next){ const Labs = require("../models/Labs.js"); l = new Labs("Sample Lab", "Sample Description", "Sample Category", "Sample Tech"); l.getAvailableLabs(function(){ console.log("We made it here!"); }); console.log("This is post resposnse"); Labs.js: getAvailableLabs() { var d = db.any('select * from labs') .then(data => { console.log(data[0]); return data }) .catch(function (error) { console.log(error […]

如果NodeJS的function花费太长时间,是否会超时?

我有一些第三方API运行的function,大约需要30分钟才能返回结果(他们做了一些冗长的计算)。 现在,如果我使用Nodejs调用这样一个适当的callbackAPI,默认情况下,Nodejs会等待30分钟的时间来返回结果,还是会超时? 如果超时,有没有办法增加等待时间?

Express.js req.body在获取callback时未定义

我正尝试从Dribbble Auth API接收callback。 身份validation过程工作正常,直到我试图获取响应数据与NodeJS。 我的callbackURL是http://localhost:8080/callbackcallback链接看起来像这样http://localhost:8080/callback?code=11ee328ab7935bd7240cbff0a2d0b8c93e96547e0a3&state=aoksdmSAOKDm 我正在使用body-parser和multer。 var express = require("express"); var multer = require("multer"); var bodyParser = require("body-parser"); var cookieParser = require("cookie-parser"); var upload = multer({ storage: multer.memoryStorage() }); var app = express(); app.use(cookieParser()); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(express.static(path.join(__dirname, "../webapp/"))); app.get("/callback", upload.single("code"), (req,res) => { console.log(req.body); res.send() } 控制台中的响应是未定义的