Tag: node.js

使用Node和Express进行基本的HTTP身份validation4

它看起来像使用Express v3实现基本的HTTP身份validation是微不足道的: app.use(express.basicAuth('username', 'password')); 版本4(我使用4.2)删除了basicAuth中间件,所以我有点卡住了。 我有下面的代码,但它不会导致浏览器提示用户input凭据,这是我想要的(以及我想象的旧方法): app.use(function(req, res, next) { var user = auth(req); if (user === undefined || user['name'] !== 'username' || user['pass'] !== 'password') { res.writeHead(401, 'Access invalid for user', {'Content-Type' : 'text/plain'}); res.end('Invalid credentials'); } else { next(); } });

用grunt自动化npm和bower安装

我有一个node / angular项目,使用npm作为后端依赖pipe理,而bower作为前端依赖pipe理。 我想使用一个咕task任务来执行两个安装命令。 我一直无法弄清楚如何去做。 我试图使用exec ,但实际上并没有安装任何东西。 module.exports = function(grunt) { grunt.registerTask('install', 'install the backend and frontend dependencies', function() { // adapted from http://www.dzone.com/snippets/execute-unix-command-nodejs var exec = require('child_process').exec, sys = require('sys'); function puts(error, stdout, stderr) { console.log(stdout); sys.puts(stdout) } // assuming this command is run from the root of the repo exec('bower install', {cwd: './frontend'}, […]

如何得到mongoose模型的所有计数?

我怎样才能知道数据已保存的模型的数量? 有一个Model.count()的方法,但似乎没有工作。 var db = mongoose.connect('mongodb://localhost/myApp'); var userSchema = new Schema({name:String,password:String}); userModel =db.model('UserList',userSchema); var userCount = userModel.count('name'); userCount是一个对象,哪个方法可以得到一个真正的count ? 谢谢

如何指定HTTP错误代码?

我努力了: app.get('/', function(req, res, next) { var e = new Error('error message'); e.status = 400; next(e); }); 和: app.get('/', function(req, res, next) { res.statusCode = 400; var e = new Error('error message'); next(e); }); 但总是错误代码500被宣布。

Socket.IO问题与控制字符

我正在实现一个使用websockets和通过Telnet访问的控制台的应用程序。 在通过websockets和控制台build立的连接之间有一个通信。 我正在经历一个奇怪的问题: 如果在控制台中input了某个string常量时,它会向一个已build立的套接字发送一个string常量。 如果我发送一个从控制台作用域收到的string它似乎打开一个新的套接字(不知道),因为在debugging日志中我看到它,并在浏览器端(networking套接字)它提醒我一个新的连接。 如果我发送一个本地string(而不是从另一个范围收到的),它发送正确。 (注释行:client.send(message)) 我在这里分享nodeJS代码,考虑到现在这是一个testing应用程序,所以它只能假设一个套接字和websockets连接: // Sample based on: http://elegantcode.com/2011/05/04/taking-baby-steps-with-node-js-websockets/ // Changed for sockets.io 6.x => 7.x var events = require('events'); var eventEmitter = new events.EventEmitter(); var http = require('http'); var socketIO = require('socket.io'); var static = require('node-static'); var port = 2000; var clientFiles = new static.Server('./client'); var httpServer = http.createServer( function(request, […]

Node.js,Socket.io,Redis pub / sub大容量,低延迟困难

当连接socket.io/node.js和redis pub / sub以试图创build一个由可以处理多个传输的服务器事件驱动的实时Web广播系统时,似乎有三种方法: 'createClient'一个redis连接并订阅频道。 在socket.io客户机连接上,将客户机join到socket.io机房。 在redis.on(“message”,…)事件中,调用io.sockets.in(room).emit(“event”,data)分发给相关房间中的所有客户端。 像如何在socket.io中重用redis连接? 'createClient'是一个redis连接。 在socket.io客户端连接上,将客户端join到socket.io房间并订阅相关的redis通道。 在客户端连接closures和接收到消息调用client.emit(“event”,data)中包含redis.on(“message”,…)以引发特定客户端上的事件。 就像在使用socket.io中的RedisStore的例子中的答案一样 按照socketio-spec协议,使用RedisStore烘焙到socket.io中并从Redis中的单个“dispatch”通道“广播”。 Number 1允许为所有客户端处理Redis子和关联事件一次。 Number 2提供了一个更直接的挂钩到Redis pub / sub。 3号更简单,但对消息传递事件的控制很less。 然而,在我的testing中,所有连接的客户端都超过1个,performance出意外的低性能。 有问题的服务器事件是尽快发布到redis通道的1,000条消息,尽快分发。 性能是通过连接客户端的时间来衡量的(socket.io-client基于日志时间戳进入Redis列表进行分析)。 我猜测,在选项1中,服务器接收到消息,然后将其顺序写入所有连接的客户端。 在选项2中,服务器多次接收每条消息(每个客户端订阅一次)并将其写入相关的客户端。 在任何情况下,服务器都不会到达第二个消息事件,直到它传达给所有连接的客户端。 情况明显加剧,并发性上升。 这似乎与堆栈function的智慧不符。 我想相信,但我正在挣扎。 这种情况(大量消息的低延迟分布)只是没有这些工具的选项(还?),还是我错过了一个把戏?

IDE和debugging器node.js

我将在node.js中开始构build项目(之前在PHP中工作),node.js的IDE,debugging器和帮助工具是什么,在编码时帮助改进?

访问客户端JavaScript中的Express.js局部variables

好奇,如果我这样做是正确的,如果不是你们如何处理这个问题。 我有一个Jade模板需要呈现从MongoDB数据库检索到的一些数据,我也需要访问客户端JavaScript文件中的数据。 我正在使用Express.js并将数据发送到Jade模板,如下所示: var myMongoDbObject = {name : 'stephen'}; res.render('home', { locals: { data : myMongoDbObject } }); 然后在home.jade里面,我可以做这样的事情: p Hello #{data.name}! 其中写道: Hello stephen! 现在我想要的是也可以访问客户端JS文件中的这个数据对象,所以我可以操纵对象说一个button,然后将其返回到服务器来更新数据库。 我已经能够通过在Jade模板的隐藏input字段中保存“data”对象,然后在我的客户端JS文件中获取该字段的值来实现这一点。 在home.jade里面 – local_data = JSON.stringify(data) // data coming in from Express.js input(type='hidden', value=local_data)#myLocalDataObj 然后在我的客户端JS文件我可以像这样访问local_data: 在myLocalFile.js里面 var localObj = JSON.parse($("#myLocalDataObj").val()); console.log(localObj.name); 然而,这个string化/parsing业务感觉混乱。 我知道我可以将我的数据对象的值绑定到我的Jade模板中的DOM对象,然后使用jQuery获取这些值,但是我希望能够访问从客户端JS中快速返回的实际对象。 我的解决scheme是最佳的,你们将如何实现这一目标?

node.js中fs.createReadStream vs fs.readFile的优缺点是什么?

我正在用node.js搞清楚,发现了两种读取文件的方法,一旦确定它存在并发送了正确的MIMEtypeswriteHead: // read the entire file into memory and then spit it out fs.readFile(filename, function(err, data){ if (err) throw err; response.write(data, 'utf8'); response.end(); }); // read and pass the file as a stream of chunks fs.createReadStream(filename, { 'flags': 'r', 'encoding': 'binary', 'mode': 0666, 'bufferSize': 4 * 1024 }).addListener( "data", function(chunk) { response.write(chunk, 'binary'); }).addListener( "close",function() […]

很难理解express.js中的“next / next()”

这是一个例子: // Configuration app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); (等等。) app.get('/memo', function(req, res) { console.log("index"); Memo.find({}, function(err, data) { if(err) return next(err); res.render('index', { memos: data }); }); }); 这是另一个: app.get('/memo/list', function(req, res, next) { console.log("get memos"); Memo.find({}, function(err, data) { if(err) return next(err); res.json(data); }); […]