L'argomento di require(...)
in node.js è un nome file. Se avessi un codice sorgente del modulo in una stringacode
, potrei chiamare in qualche modo lo require(code)
e caricare le funzioni da quella stringa?Richiedi in nodejs
risposta
Una soluzione potrebbe essere quella di scrivere il codice sorgente del modulo in un file temporaneo ./tmp-file.js
e quindi require('./tmp-file')
e quindi rimuovere il file.
Probabilmente questo non è ottimale perché è necessario bloccare e scrivere il file in modo sincrono oppure inserire tutto ciò che richiede quel modulo nella richiamata alla scrittura asincrona.
Un esempio di lavoro per il file asincrona scrittura (gist - also includes sync file write):
var http = require('http');
var fs = require('fs');
var helloModuleString = "exports.world = function() { return 'Hello World\\n'; }";
fs.writeFile('./hello.js', helloModuleString, function (err) {
if (err) return console.log(err);
var hello = require('./hello');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(hello.world());
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
});
risultati in:
$ curl 127.0.0.1:1337
> Hello World
Grazie, sembra una buona soluzione di base. – Cartesius00
In generale sono d'accordo, ma ciò richiede che l'app nodo possa creare un file sul file system. E se si avviano più istanze dell'app nodo, è necessario decidere cosa fare con il file o lo spazio dei nomi in qualche modo. Ho provato ad aggiungere un'estensione personalizzata, ma ora è deprecata. Non c'è un'altra buona soluzione? –
ho messo questo in una funzione per il riutilizzo. Crea un file nella directory os temp basato su un hash casuale, lo richiede e quindi lo elimina.
var fs = require('fs'),
os = require('os'),
crypto = require('crypto');
function requireString(moduleString) {
var token = crypto.randomBytes(20).toString('hex'),
filename = os.tmpdir() + '/' + token + '.js',
requiredModule = false;
// write, require, delete
fs.writeFileSync(filename, moduleString);
requiredModule = require(filename);
fs.unlinkSync(filename);
return requiredModule;
}
allora si può fare:
var carString = "exports.start = function(){ console.log('start'); };",
car = requireString(carString);
console.log("Car:", car);
Questo è ancora più di una soluzione, ma più comodo da usare, credo.
carino, grazie – Cartesius00
- 1. Richiedi istruzione in application.css.scss
- 2. Richiedi SSL in WebApi?
- 3. Richiedi richiesta pull in TFS
- 4. Richiedi pattern Browserify/Angular
- 5. Richiedi l'input usando boxen
- 6. RequireJs - Define vs Richiedi
- 7. Richiedi due modelli insieme
- 8. Acquisizione evento pulsante Indietro in "Richiedi domanda"
- 9. Richiedi ruby gems in rails controller
- 10. Richiedi se in condizione di condizione SQL
- 11. iOS Swift: Richiedi posizione utente
- 12. Richiedi js ruins code navigation
- 13. IIS 7 Disabilitazione "Richiedi SSL"
- 14. Google plus Richiedi problema URI
- 15. Http async Android Richiedi richiesta
- 16. Libreria Nodejs senza nodejs
- 17. ReadFile in Base64 Nodejs
- 18. elenco partizioni in nodejs
- 19. Differenza oraria in Nodejs?
- 20. window.performance.now() equivalente in nodejs?
- 21. isNaN function in nodejs
- 22. Couchdb in Nodejs
- 23. database grafico in nodejs
- 24. Forking in NodeJS
- 25. Errore SSL in nodejs
- 26. Running nodejs in nginx
- 27. Richiesta HTTPS in NodeJS
- 28. Creazione di un'applicazione Web IIS7 utilizzando PowerShell con Richiedi SSL impostato su "Richiedi"
- 29. Richiedi albero nella pipeline di asset
- 30. Chiama jQuery Ajax Richiedi ogni X minuti
http://nodejs.org/api/modules.html#modules_modules (che uri ridicolo) – jAndy
@jAndy Dove si trova un codice sorgente in una stringa? Vedo solo il caricamento dal file. – Cartesius00
http://nodejs.org/api/modules.html – Thomas