Sto cercando di assegnare un costruttore in una funzione autoeseguibile in NodeJS. Sono abbastanza sicuro che non funzioni perché il mio parametro è una variabile che punta a module.exports, ma sono curioso di sapere se c'è un modo per farlo funzionare rimanendo il più vicino possibile al formato auto-eseguibile.NodeJS - Come assegnare il costruttore a module.exports nella funzione autoeseguita?
Ecco come il codice viene chiamato ...
var TemplateEngine = require('./templateEngine');
templateEngine = new TemplateEngine({engine: 'swig'}); // "object is not a function"
Ecco un esempio di codice che funziona bene ...
var assert = require('assert');
var swig = require('swig');
// Constructor
var TemplateEngine = function(args) {
assert.ok(args.engine, 'engine is required');
var templateEngine = {};
templateEngine.engine = args.engine;
templateEngine.Render = function(templateString, model) {
var result = swig.render(templateString, model);
return result;
};
return templateEngine;
};
module.exports = TemplateEngine;
ed ecco un esempio di stile di codice che avevo piace usare, ma che produce un errore "TypeError: Object is not a function" perché in realtà non sto assegnando a module.exports, solo una variabile che copiava qualunque cosa puntasse.
(function(templateEngine) {
var assert = require('assert');
var swig = require('swig');
templateEngine = function(args) {
assert.ok(args.engine, 'engine is required');
var templateEngine = {};
templateEngine.engine = args.engine;
templateEngine.Render = function (templateString, model) {
var result = swig.render(templateString, model);
return result;
};
return templateEngine;
};
})(module.exports);
C'è un modo per utilizzare il suddetto formato auto-eseguibile e il mio modulo esportare un Costruttore?
module.exports deve essere assegnato nel 2 ° codice, forse qualcosa come module.exports = new templateEngine(); ? – dandavis
devi avere molte variabili templateEngine ... – lujcon
Questo stile non è necessario. Puoi usarlo per nascondere variabili private ... ma dal lato client. Con i moduli in nodejs tutto ciò che non è assegnato a module.exports è privato, quindi questo schema è inutile. – lujcon