Articles of asynchronous

Express 4的asynchronous包装函数不会捕获错误

我试着从strongloop这个技巧https://strongloop.com/strongblog/async-error-handling-expressjs-es7-promises-generators/有一个asynchronous路由包装function,但错误的function从来没有被调用。 我也尝试把错误函数放在authRouter文件中。 在authRouter.js中: let wrap = fn => (…args) => fn(…args).catch(args[2]); router.post('/login', wrap(async (req,res) => { if (!req.body.email || !req.body.password) throw new Errors.BadRequestError(); })); export default router; 并在app.js app.use('/auth', authRouter); app.use(function(err, req, res) { console.log('in here'); const status = err.status || 500; if (status === 500) console.log(err); res.status(status); res.send({ message: err.message, error: err }); });

Node.js:请求页面并允许页面在构build之前构build

我已经看到了一些这样的答案,将askee引用到其他库(如phantom.js),但是我在这里想知道是否完全可以在node.js中做到这一点? 考虑到我的代码如下。 它使用request请求一个网页,然后使用cheerio探索dom来cheerio数据页面。 它的工作完美无缺,如果一切按计划进行,我相信它会输出一个我想像中的文件。 问题是, 我正在请求的页面 ,以build立表格即时查看asynchronous使用ajax或jsonp,我不完全确定.jsp页面如何工作。 所以在这里,我正试图find一种方法来“加载”这个数据,然后再加载我的新文件。 var cheerio = require('cheerio'), request = require('request'), fs = require('fs'); // Go to the page in question request({ method: 'GET', url: 'http://www1.chineseshipping.com.cn/en/indices/cbcfinew.jsp' }, function(err, response, body) { if (err) return console.error(err); // Tell Cherrio to load the HTML $ = cheerio.load(body); // Create an empty object to […]

Nodejs / Express – 错误:发送后无法设置标头

相当新的节点/expression。 我正在检查用户(通过用户名)是否已经存在于数据库中,如果他们已经存在,就会发出错误。 当我使用curl来尝试将其closures时,我得到以下错误: 错误:发送后无法设置标题。 我已经知道,我所做的第一个检查是为了确保所有的字段都被正确填写,并且不会多次设置标题。 任何帮助将不胜感激。 (我的相关代码如下,如果你需要其他的东西,可以这么说!) router.post('/register', function(req, res, next) { if(!req.body.username || !req.body.password){ return res.status(400).json({ message: 'Please fill out all fields.' }); } User.count({ username: req.body.username}, function(err, count){ console.log(count); if(count > 0) { return res.status(400).json({message: 'This user already exists!' }); } }); var user = new User(); user.username = req.body.username; user.setPassword(req.body.password); user.save(function(err) { […]

如何创build一个执行.jar文件的REST API?

我有一个Java应用程序(作为一个.jar文件),对给定的input做一些密集计算 – 让我们称之为calcApp。 我的目标是创build一个REST服务,允许用户发送要由服务器处理的数据(使用calApp的逻辑)。 处理的数据将在响应中发送给用户。 我打算使用Node.js创buildREST服务 – 每次用户发布用于计算的数据到路由时,calcApp.jar将作为一个进程执行,数据将通过parameter passing给它。 但问题是,calcApp只能在给定的时间处理一个请求,如果多个用户同时发布数据来计算,这将是一个问题。 给我的build议是创build两个服务器:一个使用Node.js的REST api,它将接收请求,并且每个服务器都会向另一个将负责执行calcApp.jar的Java服务器打开一个套接字。 你可以build议我如何devise服务,所以尽pipecalcApp的限制,它将是asynchronous的? 谢谢,

如何recursion调用asynchronous函数?

我定义了这个函数: // retrieves zip of package manifest supplied var retrieveZip = function(metadataClient, args, callback) { metadataClient.retrieve(args, function(err, result) { metadataClient.checkRetrieveStatus({id: result.result.id, includeZip: 'true'}, function(err, result) { if(result.result.done) { return callback(result); } // else check again!(how??) }); }); } retrieveZip(metadataClient, args, function(result) { console.log(result); }); 这个想法是,客户端将尝试根据args中提供的元数据检索一个zip文件。 API文档(Salesforce SOAP API)要求将retireve方法的结果中提供的id传递到检查状态函数中。 然而这个问题是这样的: 在第一次检查,如果结果是“完成”,那么只需从checkRetreiveStatus (包含结果)返回结果对象的callback, 但如果结果没有完成,我需要再次调用checkRetrieveStatus …从checkRetreiveStatus 天真的做法是将参数从原始的checkRetreiveStatus调用传递到checkRetreiveStatus的新实例,但显然不可能知道这将被调用多less次。 这听起来像我需要一个recursion的解决scheme呢? […]

asynchronous活动后数组的顺序

我有以下一段代码,命中一个API上传图像数组,并返回一个数组中的链接; 但是,图片上传的顺序并不令人满意。 if (req.files) { var uploadedImages = []; for (var i = 0; i < req.files.length; i++) { imgur.uploadFile(req.files[i].path) .then(function (json) { uploadedImages.push(json.data.link); if (uploadedImages.length === req.files.length) { console.log(uploadedImages); //Further processing } }) .catch(function (err) { console.log("Imgur API Error!"); console.log(err.message); res.redirect('/participants?err=' + encodeURIComponent('An unknown error occured. Please try again.')); }); } 例如,如果我上传1.jpg,2.jpg和3.jpg,那么保存这些图像的链接的数组不一定是相同的顺序。 确保订单在此asynchronous活动期间不受影响的最佳方法是什么?

在同步一个内部等待asynchronouscallback函数

我用mysql2-node模块使用Express JS来创build一个访问MySQL数据库的函数 indexOfUserInVotingList : indexOfUserInVotingList: function (voteType, articleID, userID) { SQLconnection.connectToServer(); db = SQLconnection.getConnectionInstance(); let userIndex; switch (voteType) { case "upvote": db.query('SELECT upVoters FROM article WHERE article.idArticle = ?', [articleID], function (err, rows) { if (err) { throw err; } else { let upvoterArray = rows[0].upVoters; userIndex = upvoterArray.indexOf(userID); } }); break; case "downvote": db.query('SELECT […]

在nodejs中的dynamodb中进行扫描的recursion函数

所以我需要一个nodejs中的recursion函数来replace这个函数调用: docClient.scan(params, callback) http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.04.html

从asynchronous调用的承诺和条件

我正在使用AWS DynamoDB( aws-sdk )的Node.js实现我的服务。 我不清楚如何实现以下承诺的情况: 我得到一个请求来修改具有指定属性的实体 我试图find数据库中的实体(asynchronous调用find ) 如果实体没有find,那么创build一个初始状态(asynchronous调用createInitialStateObject ) 根据特定规则(asynchronous调用applyModifications )修改实体(位于数据库之前或刚创build的第3步) 这是我第一次尝试: function scenario(params) { find(params).then((data) => { let objectExists = checkExistense(data); if (!objectExists) { createInitialStateObject(params).then((data) => { console.log("Object created"); // OK }).catch((err) => { console.error("Object not created"); // exit and return error }); } applyModifications(params).then((data) => { // OK, return data }).catch((err) => […]

何时使用asynchronousnodejs?

我不是说ES7的asynchronous,但一般的asynchronous函数,如callback和promisses。 所以,我研究了关于NodeJS和事件循环。 一切都让我相信NodeJS有一种asynchronous的错觉。 据我所知,这只有当function必须通过外部媒体传递时才有效。 例如,执行一个读取文件(将被OS API使用),或者执行一个将使用外部API的请求。 我发现很less有人谈论这个问题,我想在这里和你讨论一下。 我的问题是:我是否正确的想法? 还有,如果有实际的方法来找出asynchronous工作在哪里,它不支付? 在某些情况下,如果我是正确的,asynchronous只会花费更多的内存。