Tag: asynchronous

在后端或前端列出一个集合

我对NodeJS很新,我需要一些build议。 我有一个显示用户列表的页面,我使用Mongoose从集合中检索这个列表。 我知道显示这个列表的两种方法: 1)在加载页面之前在后端进行查询,然后将结果发送到视图: // app.js var users = Users.find({}, function(err, results){ res.render('list', { users: results}); }); 2)在页面加载之后,以asynchronous方式在前端进行查询。 例如,使用Angular // users.js var User = $resource('/getUsers'); User.query(function (results){ $scope.users = results; }); // users.html <ul> <li ng-repeat="user in users"{{ user.name }}></li> </ul> // app.js app.get('getUsers', function(req, res){ Users.find({}, function(req, results){ res.json(results); }) }); 我希望一切都清楚。 在最佳实践和/或性能方面,最好的做法是什么? 谢谢

asynchronous并行和承诺不会工作

我有以下两个片段: 这是我想要运行的单位: health.checkHealth = function (req, res) { async.parallel({ cassandra: function (callback) { cassandraRepository.ping(callback); }, kafka: function (callback) { kafkaHelper.ping(callback); }, vault: function (callback) { vaultClient.health() .then((isOk)=>{ callback(null, isOk)}) .catch(()=> callback(null, false)); } }, function (err, result) { var response = {}; if (result.cassandra) { response.cassandra = "OK"; } else { response.cassandra = "Failed"; res.status(500); […]

NodeJS – 如何asynchronous读取多个文件并将读取内容写入一个文件

我想在NodeJS中asynchronous读取多个文件。 阅读顺序无关紧要时,同时阅读多个文件是很好的select。 但是,我试图将这些文件的内容一起写入一个文件。 我可以写一个文件很好,但我怎样才能确保所有的文件已经被读取之前,我把所有的内容写入一个文件?

节点js中的嵌套asynchronousmongoDB调用

我有一个相当简单的问题,但我找不到一个优雅的解决scheme来解决这个问题。 在下面的代码中,我有两个对mongo数据库的嵌套调用。 我使用Monk来pipe理我的电话。 问题是:嵌套插入之前可能会发生for循环(1)循环。 所以下一个find(2)指令没有find最后一个插入的动作。 呼叫顺序是1-2-2-2-3-3-3(对于大小为3的动作列表)。 所以我所有的数据都被插入。 我的目标是有呼叫订单1-2-3-2-3-2-3 你有没有任何线索如何pipe理这样的问题,而不是在我的数据库发现一个大的和pipe理我的列表服务器端? (获取所有的数据,使自己的search,这是非常可怕的做,插入我想要的元素,然后把它推到数据库…) for (var action of actionList)//(1) { collectionActions.find(//(2) {eventid : action.eventid}, function(e,actionsFound) { if (actionsFound.length == 0) { collectionActions.insert(action, function(err, result)//(3) { console.log("insert action : " + action._id); }) } } ) }

为什么我的async.waterfall JavaScript的顺序代码没有结束?

当我运行下面的代码,顺序连接到MongoDB,然后closures,在javascript中使用async.waterfall程序不会按预期结束。 相反,它似乎只是在“数据库closures”行之后等待。 $ node test-async2.js hit connectMongo Connected correctly to server, DB: notes hit closeMongo DB closed [program just waits here, doesn't end] 我曾期待该计划结束。 我犯了什么错误? const async = require('async'), MongoClient = require('mongodb').MongoClient, url = 'mongodb://localhost:27017/notes'; function connectMongo(next) { console.log('hit connectMongo'); MongoClient.connect(url, function(err, db) { console.log("Connected to server, DB: " + db.databaseName); next(null, db); }); } […]

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呢? […]