Tag: 蓝鸟

如何在ejs中包含promise值?

我在express和ejs帮助下制作一个小型的节点应用程序。 在我的一个控制器中,我返回一个对象,该对象具有我希望在我看来包含的承诺属性。 我试图找出什么是最好的办法做到这一点,因为它似乎ejs不能处理承诺的价值观。 我想在模型中包括承诺的价值,但似乎我过分复杂的代码需要完成。 如何在ejs轻松呈现bluebird承诺的价值? 调节器 compaintsRouter.get('/', function(req, res) { var model = data.complaint.findAndCount({ include: [data.user, { model: data.comment, include: [data.user] }], limit: 15, offset: 15 * (req.query.page || 0) }).then(function(result){ res.render('complaints/list', {model: result.rows}); }); }); ejs查看模板 <% model.forEach(function(complaint) { %> <div class="complaint"> … more html here… <footer> <span class="vote brand-success"> <% complaint.votesUp().then(function(votes){%> <%= votes […]

抛出Mongoose pre中间件的自定义错误,并使用蓝鸟承诺

我用蓝鸟承诺使用mongoose。 我正在尝试在validation前中间件中抛出一个自定义错误,并使其捕捉到Bluebird catch。 这是我的validation方法 schema.pre('validate', function(next) { var self = this; if (self.isNew) { if (self.isModified('email')) { // Check if email address on new User is a duplicate checkForDuplicate(self, next); } } }); function checkForDuplicate(model, cb) { User.where({email: model.email}).count(function(err, count) { if (err) return cb(err); // If one is found, throw an error if (count […]

使用嵌套模式保存并查找带有参考和承诺的Mongoose文档

我有一个相当简单的问题。 我试图保存一个文档,其模式包括一个嵌套模式引用,该模式引用包括另一个模式引用。 但是,当我去检索该文档时,它不包含(必填)嵌套字段,除非将其填充到相同的查询中。 即使填充查询,但是,第二个嵌套的文档不填充。 我在这里误解了mongoose的工作方式吗? 下面的JavaScript和LiveScript示例代码和输出。 JavaScript的: (function(){ var mongoose, bookSchemaObj, authorSchemaObj, agentSchemaObj, bookSchema, authorSchema, agentSchema, Book, Author, Agent, testBookObj, testAuthorObj, testAgentObj, testAgent, testAuthor, testBook; mongoose = require("mongoose-bird")(require("mongoose")); mongoose.connect("mongodb://test:test@localhost:27017/test"); bookSchemaObj = { author: { type: mongoose.Schema.Types.ObjectId, ref: "Author", required: true }, pubYear: { type: Number } }; authorSchemaObj = { name: { type: String, required: […]

蓝鸟 – promisification – promisify所有'email-templates'节点模块 – 发送邮件

我正试图将email-templates节点模块转换为承诺。 我正在使用蓝鸟 promisification,但它不能转换。 var emailTemplates = Promise.promisifyAll(require('email-templates')); Promiseification节点模块是否支持这种转换或者我是否有任何错误? 编辑: 我现在正在做这个,但是要把它转换成蓝鸟的承诺。 var emailTemplates = require('email-templates'); var path = require('path'); var templatesDir = path.resolve(__dirname, '../..', 'assets/templates'); var postmark = require('postmark'); var postmarkKey = MY_POSTMARK_KEY; var postmarkClient = postmark(postmarkKey); module.exports = { sendEmail : function (templateName, locals, callback) { emailTemplates(templatesDir, function (err, template) { if (err) return callback(err, […]

如何在模型的属性方法中正确使用水线承诺?

在Model我使用的属性方法将查找数据库,不得不查询其他不同的模型。 所以我使用水线承诺,但我不知道如何实际执行模型的属性方法本身的返回方法,这就是我正在做的: 我们称之为LineUp模型: module.exports = { connection: 'seasonDB', attributes: { reachesMaxFavoriteTeam: function (team) { UserTeam.findOne(). where({id: this.userTeam}). then(function (team) { User.findOne(). where({id: team.userId}). then(function (user) { return [team, user.fanOf]; // I assume to be returning for the spread function }). spread(function (team, user) { // How can I make reachesMaxFavoriteTeam return something here??? }).catch(function (err) […]

Bluebird的asynchronous承诺处理

出于某种原因,我得到了一个蓝鸟许诺,我附加处理程序asynchronous。 例如: var promise = Promise.reject(new Error('Handled rejection')); setImmediate(function () { promise.then(console.log, console.error); }); 虽然我的承诺处理得很好,但蓝鸟却警告我一个未经处理的拒绝。 我可以通过同步添加一个空的拒绝处理程序来欺骗它: promise.catch(function () {}); 但是,这看起来真的很黑。 有没有适当的方法来处理这种情况? 编辑 :在回答这个评论 ,我发布了一个更详细的例子,在这个Gist我真正的用例。 它还包含我在等待Bluebird 3.0发行版时使用的解决方法。 正如Benjamin所解释的那样,Bluebird 3.0将带来一个解决scheme.suppressUnhandledRejection() 。

错误:在sailsJs中间件中发送后无法设置标题

我面临一个问题,我试图在使用Bluebird承诺的一些请求调用后,在我的中间件中设置cookie值,但我得到错误,“错误:发送后无法设置标头”, 我的代码是 User.autoLogin(req, cookieToken).then(function(apiResponse) { console.log("Autologin response"); console.log(apiResponse.autologin); return apiResponse.autologin; }).then(function(apiResponse) { if (apiResponse.success === true) { var returnUser = {}; returnUser = apiResponse.metadata.user; returnUser.isUser = 1; returnUser.cartItemsCount = apiResponse.metadata.no_of_items_cart || 0; returnUser.checkoutStep = 2; var upSesReq = { "Al": "1", "userId": returnUser.id_customer }; var sessUpdate = User.updateSession(req, upSesReq); sessUpdate.then(function(sesRes) { console.log(sesRes); if (sesRes.success === […]

将elasticsearch js和bluebird结合起来

我开始使用蓝鸟承诺框架node.js。 我正在尝试将其与elasticsearch javascript驱动程序集成。 我设法使用下面的代码工作。 我想知道这是否是启动承诺的最佳方式。 我省略了在后续步骤中调用的函数。 var esPromise = client.search({ index: "myindex", searchType: "count", body: { aggs: { allIp: { terms: { field: "ip", size: 1000, order: { _term: "asc" } } } } } }); new Promise(function (resolve, reject) { esPromise.then(resolve, reject); }) .then(extract_ips_from_aggs) .then(sort_ips) .then(log_ips) .catch(function (error) { console.log(error); });

Node.js Bluebird – 承诺错误返回为null

我有一系列的承诺,如果他们中的任何一个抛出一个错误,它会冒出最高的承诺 – 有点像全局错误捕获。 以下是我如何设置事物的简化版本: function bar() { return new Promise(function(resolve,reject) { var err = new Error('This is an error'); err.name = 'Permission'; return reject(null,err); }); } function foo() { return new Promise(function(resolve,reject) { bar() .then(function(results) { return resolve(results); }) .then(null,function(error) { console.log('Error caught'); //This shows console.log(error); //outputs null return reject(error); }); }); } foo() .then(function(results) […]

什么是循环蓝鸟承诺的最佳方式

现在我正在使用NodeJS和Sequelize来查询和处理数据库数据。 我已经从Table1调用findAll,我想要查询每行应用一些数据到Table2然后我想在发送输出之前将所有数据添加到数组,我这样做 var last_promise; var output_results = {}; Table1Model.findAll() .then(function(results1) { for (var i = 0; i < results1.length; ++i) { var result1 = results1[i]; output_results[result1.id] = result1; var add_promise = Table2Model .create({ id_from_table1: result1.id, data_from_table1: result1.data }); .then(function(result2) { output_results[result2.id_from_table1].data2 = result2; }); if (last_promise) { last_promise.then(function() { return add_promise; }); } else { […]