2017-07-24 1 views
1

Je voudrais utiliser la méthode jquery différée dans mon projet lambda sans serveur. Cependant après avoir demandé à la fois jquery & jquery-ui comme dépendances, l'erreur suivante se produit lorsque j'essaie d'utiliser la bibliothèque jquery? Je suis nouveau à serverless et lambda alors s'il vous plaît voir la fonction handler.js ci-dessous.Comment utiliser jquery dans le cadre sans serveur?

TypeError: $.each is not a function 
at /vagrant/project/node_modules/jquery-ui/ui/widget.js:690:3 
at widgetUuid (/vagrant/project/node_modules/jquery-ui/ui/widget.js:24:3) 
at Object.<anonymous> (/vagrant/project/node_modules/jquery-ui/ui/widget.js:26:2) 
at Module._compile (module.js:569:30) 
at Object.Module._extensions..js (module.js:580:10) 
at Module.load (module.js:503:32) 
at tryModuleLoad (module.js:466:12) 
at Function.Module._load (module.js:458:3) 
at Module.require (module.js:513:17) 
at require (internal/module.js:11:18) 
at Object.<anonymous> (/vagrant/project/handler.js:4:19) 
at Module._compile (module.js:569:30) 
at Object.Module._extensions..js (module.js:580:10) 
at Module.load (module.js:503:32) 
at tryModuleLoad (module.js:466:12) 
at Function.Module._load (module.js:458:3) 
at Module.require (module.js:513:17) 
at require (internal/module.js:11:18) 
at AwsInvokeLocal.invokeLocalNodeJs (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:156:33) 
at AwsInvokeLocal.invokeLocal (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:114:19) 
at AwsInvokeLocal.tryCatcher (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/util.js:16:23) 
at Promise._settlePromiseFromHandler (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:512:31) 
at Promise._settlePromise (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:569:18) 
at Promise._settlePromise0 (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:614:10) 
at Promise._settlePromises (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:693:18) 
at Async._drainQueue (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:133:16) 
at Async._drainQueues (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:143:10) 
at Immediate.Async.drainQueues (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:17:14) 
at runCallback (timers.js:800:20) 
at tryOnImmediate (timers.js:762:5) 
at processImmediate [as _immediateCallback] (timers.js:733:5) 

handler.js

'use strict'; 

global.jQuery = require('jquery'); 
global.jQueryUI = require('jquery-ui'); 

var Model = require('./resources/model'); 

module.exports.project = function(event, context, callback) { 
    Model.init(); 
}; 

model.js

var JsonFile = require('jsonfile'); 
var $ = global.jQueryUI; 

module.exports = { 
    init : function() { 
     var self = this; 

     self.fetch_file().done(function(file){ 
      console.log(file); 
     }); 
    }, 

    fetch_file : function(){ 
     var deferred = $.Deferred(); 
     JsonFile.readFile('path to file', function (err, file) { 
      deferred.resolve(file); 
     }); 

     return $.when(deferred).promise(); 
    } 
}; 

package.json

{ 
"private": true, 
    "dependencies": { 
    "avro-js": "^1.8.2", 
    "aws-sdk": "^2.88.0", 
    "jquery": "^3.2.1", 
    "jquery-ui": "^1.12.1", 
    "jsonfile": "^3.0.1" 
    }, 
    "name": "project", 
    "version": "0.1.0" 
} 

, après avoir mis Jquery au lieu de jQueryUI je reçois cette exception:

TypeError: $.Deferred is not a function 
    at Object.fetch_schema (/vagrant/project/resources/model.js:17:26) 
    at Object.init (/vagrant/project/resources/model.js:11:14) 
    at module.exports.pixel_event_lambda_producer (/vagrant/project/handler.js:9:10) 
    at AwsInvokeLocal.invokeLocalNodeJs (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:229:12) 
    at AwsInvokeLocal.invokeLocal (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:114:19) 
From previous event: 
    at Object.invoke:local:invoke [as hook] (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:24:10) 
    at BbPromise.reduce (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:218:55) 
From previous event: 
    at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:218:22) 
    at PluginManager.run (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:237:17) 
    at variables.populateService.then (/usr/local/lib/node_modules/serverless/lib/Serverless.js:99:33) 
    at runCallback (timers.js:800:20) 
    at tryOnImmediate (timers.js:762:5) 
    at processImmediate [as _immediateCallback] (timers.js:733:5) 
From previous event: 
    at Serverless.run (/usr/local/lib/node_modules/serverless/lib/Serverless.js:86:74) 
    at serverless.init.then (/usr/local/lib/node_modules/serverless/bin/serverless:39:50) 
    at <anonymous> 
+0

'var $ = global.jQueryUI;' -> 'var $ = global.jQuery;' – Andreas

+0

J'ai essayé d'utiliser JQuery mais a obtenu l'erreur: $ .Deferred n'est pas une fonction – Freid001

Répondre

0

Vous avez confondu jQuery avec l'interface utilisateur jQuery. Dans votre model.js, Replace:

var $ = global.jQueryUI; 

Avec:

var $ = global.jQuery; 

Deferred est une méthode jQuery, et non une fonction jQuery UI.

+0

J'ai essayé d'utiliser JQuery mais j'ai obtenu l'erreur: $ .Deferred n'est pas une fonction – Freid001

+0

Regardez le dossier zip dans le dossier '.serverless'. Voyez-vous le module jQuery là? – Zanon

+0

Oui, je peux voir le module jquery dans le répertoire node_modules du dossier zip à l'intérieur. sans serveur – Freid001