正则expression式适用于浏览器,但不适用于Node.js

我必须匹配给定variables的一些string。 说我有变数 var x = 'elseif testing'; 现在我想从这个string获取值“testing”。 所以写了。 x.match(/^elseif(.*)/); 后来我意识到有时候我会得到string: var x = 'else if testing'; 所以我写了expression式来匹配: x.match(/^else[\s+]if(.*)/); 这适用于浏览器,但不在Node.js中。 任何原因为什么?

ImageMagick识别报告不正确的GIF帧数

我正在使用ImageMagick来做一些GIF图像的东西。 我的一个步骤是identify图像中的帧数。 我通过node-imagemagick (和后面的gm )调用identify ,如下所示: identify -format '%T,%w,%h ' test.gif 大多数情况下,我正确地得到53帧空间分隔的53个值。 但是有时候我会得到47或50帧的相同的GIF图像 (有53帧)。 这怎么可能发生? 我在同一时间运行convert -coalesce -append test.gif other.gif ,但它不应该触摸原始图像,对不对? 此外,我检查和原始图像就好,即使错误的帧数报告。 我甚至不能一致地重现这一点。 我在哪里寻找问题? 这似乎发生在我同时运行多个ImageMagick进程时(在不同的文件上)。 我在2013-12-11使用ImageMagick 6.8.7-9 Q16 x86_64。 有问题的图片: (但是我发生过这种情况,其他图像。)

什么是socket.emit(object,string)?

我想了解一些使用socket.io编写的node.js服务器代码,我发现这一行 socket.emit({ name: 'some_string', id: id }, string); 当第一个参数是Object时,我还没有发现什么。 有人能向我澄清这一点吗?

套接字而不是ajax进行客户端/服务器通信

在这个node.js论坛应用程序https://github.com/designcreateplay/NodeBB ,它允许你跟随网站上的其他用户,我注意到,它似乎使用套接字来沟通信息,我会被期望通过通信ajax发布请求。 例如,当你点击button关注另一个用户(这个论坛软件允许)时,客户端上的套接字就会发出一个'api:user.follow'事件,然后在服务器上被监听,如下图所示。 你能解释为什么有人会或不想使用套接字而不是Ajax来实现这种function? 我认为每个人都有优点和缺点,但是我不认识他们。 客户 followBtn.on('click', function() { socket.emit('api:user.follow', { uid: theirid }, function(success) { if (success) { followBtn.addClass('hide'); unfollowBtn.removeClass('hide'); app.alertSuccess('You are now following ' + username + '!'); } else { app.alertError('There was an error following' + username + '!'); } }); return false; }); 服务器 socket.on('api:user.follow', function(data, callback) { if (uid) { […]

通过节点中的事件修改variables – 是否安全?

想象一下在节点中的这种情况: var output = ''; module1.on('done', function() { output += 'aaaa'; }); module2.on('done', function() { output += 'bbbb'; }); // …Doing stuff… // Assume this is inside a promise/callback and executed after both events have fired console.log(output); 是否有可能得到像aabbaabb输出?

如何写多行JavaScript代码文件与节点?

我在前端生成一些js代码,我想要写一个js文件,通过api调用一个节点服务器,我遇到了一些麻烦1)确保代码不写入文件作为文字string和2)确保保留多行。 这是我的代码如何试图这样做: //client var bar = "mongolia"; //this value changes hence pulling it into variable var jsCode = "function(){ \n baz = foo(" + bar + "); \n return baz*2;" var data = { code: jsCode } $http.post('api/code', data).success(function(savedCode){ console.log("successful and the saved code is", savedCode); }); //server 'use strict'; var jf = require('jsonfile'), util […]

Mongodb:如何执行子查询?

我有文件进一步有arrays。 我想要查询作为以前的查询结果返回的数组。 比如我有 { {_id : 001, data: [{ value: 1, name: 'Roger' }, {value: 2, name: 'Albert' }, {value: 3, name: 'Allen' }] }, {_id: 002, data: [{value: 4, name: 'Allison' }, {value: 5, name: 'Tom' }] } } 我可以得到的文件_id等于001,但我想查询它的数据字段中的值等于2和3.我不知道这是什么解决scheme。 在SQL它可以执行子查询,但我不知道如何在MongoDB中做到这一点。

更新与mongoose

我需要设置一个嵌套数组的对象与属性为“默认= true”,但我只需要一个与此属性,其他人不能有这个属性。 例: { "_id": "xxxxx", "name": "Jmae", "desktops": [ { "_id": "xxxxx", "name": "Mike", "default": true }, { "_id": "xxxxx", "name": "Aris" }, { "_id": "xxxxx", "name": "John" } ] } 这只设置,但不删除: var filter = { "_id": platformId, "desktops._id": desktopId }, updateParams = { "$set": { "desktops.$.default": true } }; crud.findOneAndUpdate(filter, updateParams, null, callback); […]

如何不保存在Mongoose中的某个字段?

我正在通过Mongoose更新logging,但是当我尝试不包含一个字段,通过不包括它在属性对象字段只是被设置为空。 我的模特: var demo = new Schema({ name: String, slug: String, code: String, details: String, scripts: [], css: [], status: { type: String, default: "draft" }, lastModifiedDate: { type: Date, default: Date.now }, projectId: Schema.ObjectId }); 我在哪里储蓄: Demo.find({ slug: req.params.demoSlug }, function(err,demos){ if(err){ console.log("Error retrieving demo from db"); res.send(500,err); return; } demos[0].update({ _id:req.params.id },{ name: […]

问题与服务静态文件与socket.io

我正在创build一个Web应用程序,用户可以login(密码/用户名)。 login后,他可以select2个可用的应用程序之一。 第一个应用程序使用客户端和服务器之间的http连接。 第二个使用web套接字。 所以当用户点击第二个应用时,应该build立一个websocket。 我的第一个应用程序工作正常,也是第二个,但是当我把所有的一起。 我有个问题。 这是我迄今为止所做的: server.js var app = express(); var server = http.createServer(app, function(req, res) { //serves static files //processes GET and POST requests of both the login page and the 1st app } server.listen(80, function() { console.log("Server listening on port 80."); }); app.configure(function () { app.use(express.cookieParser()); app.use(express.session({secret: 'secret', key: 'express.sid'})); […]