Articles of 快速

Swift队列和延迟过程

在迅速3.0 我需要在节点服务器上点击一个button发送一个字典,用户可以频繁地点击或点击这个button。 所以我需要一次又一次地把这个字典发送到队列中,并延迟一段时间。 同时用户可以多次按HIT键,但QUEUE会逐个单独执行,不依赖于单击button。 这是我的代码 func sendProductInCart(Product: NSString) { delayWithSeconds(5) { let msgToSend: String = String.init(format: "__JSON__START__%@__JSON__END__", Product) print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") print(msgToSend) let data: Data? = msgToSend.data(using: String.Encoding.utf8) _ = data?.withUnsafeBytes { self.outputStream.write($0, maxLength: (data?.count)!) } } } func delayWithSeconds(_ seconds: Double, completion: @escaping () -> ()) { DispatchQueue.main.asyncAfter(deadline: .now() + seconds) { completion() } } 但这是行不通的。 […]

如何在使用npm run运行端到端testing之前启动节点服务器?

我正在写一个快速站点的端到端testing,我想在package.js中添加一个“testing”命令 这个命令需要: 运行eslint 编译打字稿 启动节点服务器 对该服务器运行unit testing并显示输出。 一旦完成testing,closures服务器。 我知道如何单独执行所有这些命令,但不是一次全部执行。 我现在拥有的是: npm run compile && npm run build && node ./dist/server.js –db=test && npm run test 它的工作原理是:“ && npm run test ”,因为节点服务器正在运行,它不会继续到下一个命令,如果它closures,那么testing将不会运行。 任何帮助表示赞赏。

从数据库获取最新的5个数据

我使用node.jsexpression和使用MongoDB,我有一个用户名和ID的数据列表。 如果我想console.log 5插入到数据库的最新数据,你会怎么做? 有任何想法吗?

我应该在node.js和Express中链接方法和函数吗?

就像其他人一样,看起来,我已经开始使用node.js和Express框架了。 虽然我对客户端Javascript有很大的信心,但是当然依赖于JQuery,我用Node.js玩弄了很多,这让我对Javascript的实际工作缺乏正确的理解。 因此,这个问题。 我看过的每一个教程,包括Holowaychuk先生自己的教程,都是这样做的: var express = require('express'), app = express(); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use('/images', express.static(__dirname + '/public/images')); app.get('/', <do something>); app.get('/:something', <do something else>) app.listen(3000); 如果我正在为客户端JavaScript写这样的东西,我会试图引用一次app对象,并链接任何函数或方法,从而产生这样的: var express = require('express'), app = express(); app.use(express.methodOverride()) .use(express.cookieParser()) .use('/images', express.static(__dirname + '/public/images')) .get('/', <do something>) .get('/:something', <do something else>) .listen(3000); 所以我的问题是:这两个function不同? 我在冒着不同寻常的神灵冒险吗? 任何帮助和链接的教程称为“只是因为你玩过JQuery并不意味着你懂Javascript的任何东西”将受到感激。

在数据标题中不显示cookieSession密钥

我试图解决在socket.io中访问会话variables的臭名昭着的问题。 我基本上已经阅读过谷歌关于这个话题的每一个链接,而且我还在挣扎。 毕竟我的路由我有这个: io.set('authorization', function(data,accept) { data.cookie = cookie.parse(data.headers.cookie); —> console.log(data.cookie); data.sessionID = connect.utils.parseSignedCookie(data.cookie['express.sid'].split('.')[0].substring(2), conf.sessionSecret); sessionStore.get(data.sessionID, function (err, session) { console.log(session); }); }); 不幸的是,我画了一个箭头的console.log返回: { 'connect.sid': 's:3pIi31DPthO8KVOjqzYpeL75.nHvKOpMZsUsyto7CtBJgcJZIiBSN+IC2/aD0GcfYftU' } 所以当然,我得到一个关于express.sid未定义的错误。 当我更改express.sid connect.sid时,我的会话variables未定义。 我真的很努力地解决这个问题 – 我已经在这里待了几个小时。 任何帮助? 编辑:总结我解决的问题: 在app.config中,我使用cookieSession而不是会话 我的客户端连接到我的服务器的端口转发的外部ip版本。 这不包含cookie数据。 .split('。')[0] .substring(2)在查找sessionID时是绝对必要的 在io.set('authorization,function(handshake,callback)…必须调用“callback(null,true)”)的结尾,以便socket.io连接正常进行

是否有可能在Express中使特定用户的会话数据无效或删除?

好的,所以对于我的高级devise项目,我正在和一个Node.JS / Express应用程序的团队一起工作,参加SGA学生志愿者项目。 我们正在Express中使用MongoDB进行持久性会话存储。 当用户login时,他们的文档被复制到他们的会话存储中。 任何时候用户数据都被修改,它被写入MongoDB数据库。 如果数据库更新成功,用户会话将更新为数据库中的新文档。 每次请求用户数据时,都会从会话存储中读取数据。 只要会话每次在数据库中成功修改用户数据时都保持更新,就可以工作。 它还使我们避免每次使用某些用户数据渲染视图时都必须从数据库读取数据。 我们有不同types的用户。 我们有学生volunteer型用户,不同级别的staff型用户。 我不认为我们的会话/数据库组合会有问题,直到我的合作伙伴实现了顶级stafftypes用户的function。 他们有能力修改学生volunteer用户的数据。 在写入数据库时​​这不是问题,我们只是将修改的数据写入志愿者文档。 问题出在这样的事实,据我所知,我们没有办法根据stafftypes用户的请求来更新/无效/删除volunteer用户的会话来修改它。 基本上,如果一个staff用户修改一个volunteer用户的数据,而这个volunteer用户没有签名,那么一切工作正常,将会进行修改,数据库中的volunteer文件将被修改。 当志愿者签署这个修改后的数据将从数据库中读取并存储在用户的会话中。 但是,如果staff用户修改了volunteer用户的数据,并且volunteer用户login,则可能会出现问题。 数据库中的volunteer文档将被更新,但是volunteer用户的会话将不会被更新,直到会话结束并且用户再次login从而使他们的文档被从数据库读入到他们的新会话中,或者直到volunteer用户修改他们的数据,使他们的会话更新来自数据库的新数据(这种可能性可能会或可能不会覆盖staff用户所做的改变)。 毋庸置疑,如果不加以解决,这可能会导致不一致。 有没有人有任何build议,我可以如何处理这个。 如果我们要允许一个用户更新另一个用户的数据,是否可以按照计划使用会话存储? 是否有可能使特定用户的会话无效/删除以响应不同的特定用户的请求? 或者可能修改特定用户的会话以响应不同的特定用户的请求? 编辑:不知道这是如何脱离主题,也许有点过于专注,可能没有“最小的理解”,我会尝试纠正,增加一些更多的澄清我的问题: function updateUserDocument(req, res, id, callback) { var data = req.body; var query = { _id: id }; var cmd = { $set: { role: 'volunteer', volunteer: data } }; […]

在Express中使用MongoStore时出错

我试图将我的Express应用程序的会话存储在MongoStore中,但是在连接时出现错误。 该错误是一个巨大的对象/ JSON,我无法理解,所以我尝试了所有替代方法,我在网上find,但没有运气,迄今为止… 这里是应用程序configuration: var express = require('express'), MongoStore = require('connect-mongo')(express), passport = require('passport'); var app = express(); app.configure(function(){ app.use(express.compress()); app.use(express.static(path.join(__dirname, 'public'))); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.set('port', process.env.PORT || 8000); app.use(express.favicon(__dirname + '/public/img/favicon.ico')); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('secret')); app.use(express.session({ secret: 'secret', store: new MongoStore({ db: dbOptions.db, host: dbOptions.host, port: dbOptions.port, username: dbOptions.username, password: […]

Node.js,Express,jQuery.param() – 从JSON中删除引号

我使用jQuery.param()序列化客户端上的JSON对象: var test = {"coordinates":[[-122.610168,37.598167],[-122.288818,37.598167],[-122.288818,37.845833],[-122.610168,37.845833],[-122.610168,37.598167]]}; console.log($.param( test )); 在发出GET请求之后,在Express路由的服务器端,我访问对象: console.log('Server received: ' + JSON.stringify(req.query.coordinates)); 这将输出下面的注释每个坐标周围的引号: Server received: [["-122.610168","37.598167"],["-122.288818","37.598167"],["-122.288818","37.845833"],["-122.610168","37.845833"],["-122.610168","37.598167"]] 我怎样才能删除报价? 我可以parsing一个string,并使用正则expression式然后parsing回JSON,但这似乎效率低下。 任何人都可以build议过程的哪一部分是添加它们,以及如何删除它们?

失去与async.waterfall范围

我在JavaScript新,所以这可能是微不足道的。 我试图根据Node JS / Restify的asynchronous模块的瀑布方法来运行一系列函数。 这种方法的主要优点是可以将当前callback的“结果”传递给下一个等等,从而有可能打破“瀑布”并运行下一个中间件。 如文档中所述,它的参数是一组函数和最后一个中间件。 所以我根据下面的代码设置我的function,然后调用 var fn1 = function(callback){ console.log(req.params.user_id); callback(null, req.params.user_id); }; var fn2 = function(user_id, callback){ console.log(user_id); callback(); } server.get('/:user_id', function(req, res, next){ async.waterfall([fn1, fn2], function(err, result){ next(); }) }, …(next middleware) ) 而我没有得到预期的结果,因为req对象没有被定义。 但是,当这样做: server.get('/:user_id', function(req, res, next){ async.waterfall([ function(callback){ console.log(req.params.user_id); callback(null, req.params.user_id); }, function(user_id, callback){ console.log(user_id); callback(); } […]

摩卡它()testing只通过,如果没有事先testing

我正在testing一个MEAN应用程序。 每个testing只是确保我得到正确的回应代码。 在我的路由器中,他们使用res.send()成功返回json。 这里给出的第二个testing只有当第一个被注释掉时才会通过。 如果我把第一个testing评论出来,第一个testing通过,但第二个testing通过。 这种行为对于这两个testing不是唯一的。 在“接受经济长期”之前,还有另外一个考验。 如果我评论一下,接受经济和长期的工作。 如果我离开它,接受经纬度。 我需要做些什么才能让这些asynchronoustesting通过? 我曾尝试将超时设置为60秒,但这也不起作用。 var assert = require('assert'); var server = require('../bin/www'); var request = require('supertest'); request = request('http://localhost:3000'); describe('POST service request', function(){ this.timeout(5000); var postRequest = request.post('/requests.json').type('form'); … (other commented out tests) … // it('accepts lat and long', function (done){ // postRequest.send({ // service_code: 2000, // long: […]