为什么node-amqp出现问题时会“closures”事件?

(我正在使用node-amqp和rabbitmq服务器。) 我想猜测为什么我有一个closures事件,如果出现错误。 例如,如果我尝试打开连接到队列(具有错误的参数),我收到一个错误事件。 这是完美的。 但是,在发生任何错误之后,我将收到一个closures的连接(在这种情况下,可能是因为closures了失败的套接字到队列)。 之后,自动重新连接,我收到(初始)准备好的事件。 问题: connection.on('ready', function() { do_a_lot_of_things }).on(error, function(error){ solve_the_problem }); 如果出现错误,我收到错误,但是“准备就绪”事件,它将重新do_a_lot_of_things。 我的方法错了吗? 最好的祝福

在路由的Express应用程序中重用MongoClient

我想在我的路线中重复使用MongoClient连接(我已经看到有使用旧连接的方法,但是我想使用MongoClient,我也想有一个单独的数据库configuration文件 app.js(snippet) var route = require('route'); app.get("/", route.test); dbconf.js var MongoClient = require('mongodb').MongoClient; var mongourl = 'mongodb://localhost/test'; MongoClient.connect(mongourl, function(err, db) { if(err) console.log('Error connecting to ' + mongourl + ': ' + err); var coll = db.collection('testcollection'); }); route.js(snippet) exports.test = function(req, res) { //i would like to use the connection created in dbconf.js here […]

mongoose嵌套数组,树木和embedded式文档

我有一个像这样的mongoose模式: Schema: Item Schema: SubItem Schema: SubItemTwo //Item Schema looks like this: Item: { SubItem: [SubItemSchema] } SubItemSchema looks like this: { field1: String, field2: String, OtherItems: [SubItemTwoSchema] } SubItemTwoSchema是一些string字段的平面模式。 基本上我发现使用查询,$ set,$ inc和$ addToSet等操作符来处理SubItemSchema.OtherItems几乎是不可能的。我不相信mongoose的方法是有效的,因为我必须保存整个“Items”实例将子数组标记为已修改,即Mongoose push()和save(),即Item.SubItem [0] .OtherItems.push(thing) Mongoose只支持一个embedded式文档数组和一个数组中的数组 – 对于第二个级别的数组来说变得不可能。 所以我的问题是人们使用什么方法来处理这种types的数据模型,即一个数组有一个子数组的对象。 我注意到关于树结构的http://docs.mongodb.org/manual/tutorial/model-tree-structures/上的文档,但是我还没有看到如何在不使用mongoose的push方法的情况下build模一个2级嵌套数组的实现。 关于build模树结构的MongoDb文件需要添加字段来引用父母和祖先,但是这似乎过分,因为我的树只有3层深。 所以我应该:1.使用文档数组2.去除mongoose和使用不在数组中的embedded式文档3.重新build模我的数据,以便我没有数组中的数组? 如果选项3是答案,您将如何build议重新模式化模式,以便SubItemTwo文档可以是SubItem文档的子项,并且SubItem文档可以是父项的子项。 谢谢

putObject使Nodejs中的服务器上的对象更大

我正在使用Nodejs尝试使用aws-sdk将图像推送到S3实例。 目前,它从客户端上的一个文件读取,然后将其保存在服务器上(我使用的是meteor框架)。我想推送到S3服务器,而不是保存在meteor服务器上。 当我尝试迁移它时,图像似乎在S3上增加了大约30%。 如果我尝试从S3下载它们,图像也不再可见,所以看起来它已经改变了编码或者什么。 这里是在客户端加载文件的代码: saveFile = function( blob, name, path, type, callback ) { var fileReader = new FileReader(); var method; var encoding = 'binary'; var type = type || 'binary'; switch( type ) { case 'text': method = 'readAsText'; encoding = 'utf8'; break; case 'binary': method = 'readAsBinaryString'; encoding = 'binary'; break; default: […]

如何testingREST API +客户端MVC应用程序?

如果你有一个RESTful服务器,它只通过从数据库获取一些信息来响应JSON,然后你有一个客户端应用程序,比如Backbone,Ember或者Angular,你从哪一边testing一个应用程序? 我是否需要两个testing – 一个用于后端testing,另一个用于前端testing? 我问的原因是testingREST API本身是一种困难。 考虑这个代码示例(使用Mocha,Supertest,Express): var request = require('supertest'); var should = require('chai').should(); var app = require('../app'); describe('GET /api/v1/people/:id', function() { it('should respond with a single person instance', function(done) { request(app) .get('/api/v1/people/:id') .expect(200) .end(function(err, res) { var json = res.body; json.should.have.property('name'); done(); }); }); }); 注意:id在URL中的:id ? 这是一个特定人物的ObjectId。 我怎么知道要通过那里? 在这一点上,我甚至没有看过数据库。 我的意思是我需要导入Person模型,连接到数据库,并从testing内部做查询? 也许我应该把我的整个app.js移动到testing中? (讽刺:P)。 […]

PassportJS不通过身份validation

我究竟做错了什么? 它总是redirect到失败页面,但我无法debugging。 // passport var passport = require('passport'), LocalStrategy = require('passport-local').Strategy, User = require('./models/user.js').Model; passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'password' }, function(username, password, done) { User.findOne({ username: username }, function(err, user) { console.log('entrou'); if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return […]

在Sails.js中使用不同的ORM(如node-orm2)的“干净的”方法?

我正在审查node.js的各种框架,现在我正在通过编写一个小的CRUD应用程序来testingSails.js。 我想知道是否有一个优雅的方式来使用一个不同的ORM以外的风帆包括。 在Sails.js的文档中,我还没有看到使用不同的ORM。 是否有任何“集成”的非特定的function,我可能会错过尝试使用不同的ORM?

pipe理文件到uglifyjs – 从Powershell

我想用我的.js文件pipe道uglifyjs使用Windows PowerShell的。 这不会工作: dir .\build -filter *.js | uglifyjs > bundle.js 从uglifyjs2文档我可以看到,uglifyjs需要2个参数: uglifyjs [input files] [options] 我已经了解到,我可以使用pipe道运算符对一个参数进行function修改。 但是, 我应该如何处理2个参数 ? 另外,uglifyjs会将结果写入STDOUT。 这意味着我可以简单地使用>将其写入文件?

Grunt:recursion模板如何工作?

我是Grunt的新手,并且在recursion模板方面遇到了一些问题。 下面是一个具体的例子: var path = require('path'); module.exports = function(grunt) { grunt.initConfig({ // Stash path here so we can reference it from templates. path: path, argPrint: function(arg1, arg2) { return "arg1: " + arg1 + " arg2: " + arg2; }, build: { root_dir: __dirname, build_dir: '<%= path.resolve(build.root_dir, "dev") %>', vendor_dir: '<%= path.resolve(build.build_dir, "vendor") %>', classes_dir: […]

Adobe Brackets Live Preview无法访问Node.js服务器

使用Adobe Brackets运行Node.js服务器时遇到问题。 一旦在实时预览(URL是http://localhost:SOMERANDOMPORT/path/to/file.html ),我启动服务器。 如果我inputhttp://localhost:3000/test直接http://localhost:3000/test到另一个选项卡,它显示正确的JSON。 然后,我添加了一个事件函数给file.html中的一个元素,点击它,向我的服务器发出一个AJAX请求,并使用响应来改变它的一些内部HTML。 但是,点击实时预览中的元素失败,错误callback被调用。 我怎样才能解决这个问题? 我怀疑这与AJAX请求发送到http://localhost:SOMERANDOMPORT/test而不是http://localhost:3000/test的事实有关,但我似乎无法find解决scheme。 一切都在本地运行 以下是我的服务器: var express = require('express'); var mysql = require('mysql'); var app = express(); app.get('/test', function(req, res){ var connection = mysql.createConnection(…); connection.query("SELECT author FROM posts", function(err, results) { if (err) { console.log(err); console.log('Error on retrieving data.'); res.send(err); return; } console.log(results[results.length – 1]); res.send(results[results.length – 1]); // […]