所有! 我目前面临一个问题,即使用ClaudiaJS + Claudia-API-Builder构build的lambda函数,通过“/ api / auth”暴露在API网关上,从Cognito UserPoolvalidation用户身份。 我似乎无法find调用cognitoUser.authenticateUser成功的cognitoUser.authenticateUser 。 到目前为止,我发现的所有资源都是通过浏览器调用这个API,但是在后台我找不到任何这样做的例子。 我已经试图处理响应作为一个常规的callback,承诺和对象监听,但没有一个似乎工作,我总是最终得到一个{“消息”:“内部服务器错误”}信息作为我的回应REST服务。 还有一点很重要,那就是我对Node和Async编程还算陌生,但是请您介绍一下这段代码并告诉我这样做的正确方法,如果这个SDK被devise为从后端调用而不是前端调用? 我的App.js var ApiBuilder = require('claudia-api-builder'); var api = new ApiBuilder(); //Routes var usuario = require('./routes/usuario'); var auth = require('./routes/auth'); //Caminho default da API var API_ROOT = "simc/api"; //User Routes api.get(API_ROOT + "/f1", usuario.f1); api.get(API_ROOT + "/f2", usuario.f2); //Auth Routes api.get(API_ROOT + "/login", […]
鉴于下面的代码,我假设我遇到了asynchronous问题。 exports.existingCheck = function (req, res, next) { var query = [], message = [], userObj = {}, i, body = req.body; if(body.displayName){ var regex = new RegExp(["^", body.displayName, "$"].join(""), "i"); }; if(req.user){ var userObj = req.user; } if (body.displayName !== userObj.displayName) { console.log('body n no match') query.push({ displayName: regex }); } if (body.email !== […]
也许我不完全明白承诺或者Sequalize,但是经过一段时间的处理,感觉asynchronousDB操作只适用于简单的情况。 并且通过询问同步数据库访问的问题的数量,它看起来并不是唯一的。 这是我的情况。 假设我们有化合物的CSV文件,其中每行包含有关化合物的信息,以及以分号分隔的其成分列表。 我们希望从其中填充成分表,但没有重复。 例如,如果文件包含行 C1 IngA; IngB C2 IngA; IngC 我们想要三个loggingIngA,IngB和IngC的成分表。 所以当阅读行时,应该保存复合体,对于每个成分检查是否已经存在,如果不添加。 这里是代码: var lineReader=require('readline').createInterface({ input: require('fs').createReadStream(filename) }); lineReader.on('line', function(line) { let parts=line.split('\t'); compoundModel.create({ name: parts[0], }).then(entity => { let ingredients=parts[1].split(';'); ingredients.forEach((ing, index) => { ingModel.findOne({ where: {name: ing} }).then(ingEntity => { if (ingEntity) { return ingEntity; } return ingModel.create({ name: ing }) […]
我有一个名为process-promise的模块(例子被简化了),它有一个单独的function,将一个Promise作为input并对其进行处理 – 它还使用外部模块调用其他function,如下所示: //<process-promise.js> let User = require('user-module'); let processPromise = (promiseObj) => { let user = new User(); promiseObj.then((full_name) => { const [ fname, sname ] = full_name.split(' '); if (fname && sname) { user.setDetails(fname, sname); } else{ console.log('nothing happened'); } }).catch((err) => { console.log(err.message); }); }; module.exports = { processPromise }; 我正在尝试使用Jasmine,Rewire和Jasmine spies按照以下代码对上述函数进行unit […]
我有两个webpack包, main.js和vendor.js 。 显然, main.js脚本在main.js有很多依赖关系,必须先加载供应商。 目前,在我的HTML文档的结尾,我只是在做: <script src={assets.javascript.vendor} charSet='UTF-8' /> <script src={assets.javascript.main} async defer charSet='UTF-8' /> 这样,至lessmain.js包被加载asynchronous。 但是,如果我将这两个捆绑包设置为asynchronous,则页面加载将根据下载/执行的顺序而随机失败。 基本上每个pagespeed工具都会抱怨vendor.js是“呈现阻塞”,即使它在我的html文档的最后。 我不知道如何认真采取这一点,但是有没有办法设置这两个bundle加载asynchronous,但确保执行正确的顺序发生,而不做像从其他JavaScript文件等脚本标签的东西? 这对于webpack来说必定是一个常见的用例吗?
是否有可能创build一个“弱callback”(通过类比“弱引用”),不阻止node.js退出? 我希望能够为长期运行的asynchronous任务定义一个“可选处理程序”,如果node.js进程仍在运行,但是不会阻止事件队列被“空”本身。 我没有一个真正的世界用例这样的构造,我只是想知道,如果node.js支持它(它可能需要本地扩展)。 这是一个非常简单的程序,它调用/bin/sh -c "sleep 9 ; ls"并等待它完成。 node.js进程基本上闲置9秒,直到subprocess结束。 var child_process = require("child_process"); child_process.exec("sleep 9 ; ls", function (err, stdout, stderr) { console.log(stdout); }); console.log("end"); 我希望能够写这样的东西,我使用setTimeout来创build一个非弱的callback,所以程序保证至less保持三秒钟。 (注意: child_process.exec确实有一个超时选项,但是必须事先设置,而这个方法允许在事实之后改变最后期限) var child_process = require("child_process"); child_process.exec_weakly("sleep 9 ; ls", function (err, stdout, stderr) { console.log(stdout); }); setTimeout(function() {}, 3000); // prevent exit for at least three seconds […]
我在Node.js上写了一个Restify应用程序 而我需要有一个函数,当Restifycallback中发生一些错误时会被调用。 这个函数应该发送一个响应给客户端。 如果我不使用承诺或asynchronous函数,我可以做这样的事情: server.on('uncaughtException', (req, res, route, err) => { log.error(err); res.send(err); }); 但是,如果我的callback是async函数,那么函数内的exception不会被调用,而是引发unhandledPromiseRejection 。 我如何重构我的代码,以便处理未处理的Promise拒绝,就像处理常见错误一样? 是的,我知道我可以检查Restify中间件本身的错误,但是它仍然会使代码更复杂,写起来更容易 if (!core.validateUUID(req.params.deviceId)) { throw new Error(`Device ${req.params.deviceId} is wrong`) } 然后 if (!core.validateUUID(req.params.deviceId)) { return next(new restify.InvalidArgumentError({ body: { success: false, error: `Device ${req.params.deviceId} is wrong`, } })); }
我想我的理解可能会受到我的.NET async/await经验的影响,所以我想要一些代码示例: 我试图让一个快速控制器等待5秒钟,然后返回响应: const getUsers = async (ms) => { var wait = ms => new Promise(resolve => setTimeout(resolve, ms)); await wait(ms); }; export const index = (req, res) => { async () => { await getUsers(5000); res.json([ { id: 1, name: 'John Doe', }, { id: 2, name: 'Jane Doe', }, ]); }; }; […]
相对较新的node.js和asynchronous的做法,到目前为止,我已经能够使用承诺阅读文件使用fs readFile,但我没有任何运气让zlib Gunzip工作。 用Coffeescript写作: promisifyRun(fs, 'readFile', filepath, 'utf-8') .then (file) -> promisifyRun(zlib, 'Gunzip', file) .then (data) -> console.log "HELLO" return data .catch respondError res promisfyRun是承诺一个单一的function(我没有写,但它的确工作)。 我已经成功地将它用于fs.readFile组件,如下所示: promisifyRun(fs, 'readFile', filepath, 'utf-8') .then (data) -> return data .catch respondError res 这工作得很好,它等待文件被打开,然后继续。 'data'包含文件的主体。 我认为它应该是一个非常合乎逻辑的扩展,将枪支组件纳入其中,但迄今为止这一直是一个挑战。 我看了几个npm gunzip模块。 看起来最有趣的是gunzip-或者zlib.Gunzip (我在这里尝试)。 这个特定情况的错误信息是: “未处理的拒绝错误:发送后无法设置标题”。 我认为这与已经完成的asynchronous性原因有关 更新 – 全堆栈跟踪: 未处理的拒绝错误:发送后无法设置标题。 ServerResponse.send(/ Users / […]
我有3个function,我想调用这个function一步一步,例如,当我将调用第一function和得到的结果,我不得不调用第二个function,并传递从第一次调用返回的参数。 在完成第二次调用之后,我必须调用第三个函数并传递从第二个函数返回的参数。 #1: getCategory = function (branch_id) { var deferred = q.defer(); var categoryData; var query = 'SELECT id,name,price,currency FROM category where branch_id=?'; pool.getConnection(function (err, connection) { connection.query(query, [branch_id], function (error, row, fields) { if (error) { deferred.reject(error); } else { connection.release(); deferred.resolve(row); } }); }); return deferred.promise; } #2: getRoom = function (branch_id, categoryID) […]