Da un pò di tempo sto usando con soddisfazione Framework7 al posto di jQuery Mobile (che è da un bel pò che non è più aggiornato).

Avevo la necessità di creare dei grafici all'interno di una pagina, prendendo i dati da un database remoto.

Mi hanno consigliato Google Charts (già usato in precedenza, ma non su un sito mobile) e devo dire che sta venendo abbastanza bene.

Quindi vediamo come integrare i due.

Su praticamente qualsiasi linguaggio, siamo abituati ad includere moduli / librerie con istruzioni come include, import, require, ecc.

Su Javascript è possibile ottenere lo stesso risultato, ma in maniera un pò differente.

Prima di usare require, dobbiamo usare exports sul modulo da importare.

Oggi vediamo come connettere Node.js a MongoDB.

Useremo anche Express; ormai è diventato praticamente un modulo standard.

Partiamo dal classico package.json:

{
    "name": "NodeB2B",
    "version": "1.0.0",
    "keywords": ["util", "functional", "server", "client", "browser"],
    "author": "Matteopuffo",
    "contributors": [],
    "dependencies": {
        "express": "*",
        "mongodb": "*"
    }
}

Come dipendenze indichiamo di prendere le ultime versioni di entrambi i moduli.

L'altra settimana stavo combattendo con Node.js ed NPM.

In pratica ottenevo sempre questo errore:

$ npm search mongo npm WARN Building the local index for the first time, please be patient [..................] | : WARN Building the local index for the first time, please be patient
     
    [12455:0x23175c0]    73384 ms: Mark-sweep 1038.6 (1354.9) -> 1032.1 (1351.0) MB, 808.4 / 0.0 ms  allocation failure GC in old space requested [12455:0x23175c0]    74196 ms: Mark-sweep 1032.1 (1351.0) ->
    1031.9 (1314.0) MB, 811.6 / 0.0 ms  last resort gc  [12455:0x23175c0]    75024 ms: Mark-sweep 1031.9 (1314.0) -> 1031.9 (1307.0) MB, 828.2 /
    0.0 ms  last resort gc 
     
    ==== JS stack trace =========================================
     
    Security context: 0x1301816c0d11
        1: fromString(aka fromString) [buffer.js:217] [pc=0xd2afa68dcae](this=0x130181604311 ,string=0x2c89d250c589 ,encoding=0x1301816c9921 <String[4]: utf8>)
        2: from [buffer.js:114] [pc=0xd2afa691090](this=0x12c0d1a860b1 ,value=0x2c89d250c589 ,encodingOrOffset=0x1301816...
     
    FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory  1: node::Abort() [npm]  2: 0xf4e4cc [npm]  3: v8::Utils::ReportOOMFailure(char const*, bool) [npm]  4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [npm]  5: v8::internal::Factory::NewRawTwoByteString(int, v8::internal::PretenureFlag) [npm]  6: v8::internal::String::SlowFlatten(v8::internal::Handle, v8::internal::PretenureFlag) [npm]  7: v8::internal::String::Flatten(v8::internal::Handle, v8::internal::PretenureFlag) [npm]  8: v8::String::WriteUtf8(char*, int, int*, int) const [npm]  9: node::StringBytes::Write(v8::Isolate*, char*, unsigned long, v8::Local, node::encoding, int*) [npm] 10: node::Buffer::New(v8::Isolate*, v8::Local, node::encoding) [npm] 11: node::Buffer::CreateFromString(v8::FunctionCallbackInfo const&) [npm] 12: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo const&)) [npm] 13: 0x7f1698 [npm] 14: 0x7f1a30 [npm] 15: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [npm] 16: 0xd2afa1063a7 Annullato (core dump creato)

L'altro giorno stavo combattendo con una funzione in Javascript di quelle che non voleva proprio funzionare.

Alla fine avevo capito che il problema era nei parametri passati alla funzione, ma non mi andava di controllarli uno per uno.

Cercavo un modo per fare un debug diretto di tutti i parametri (un pò tipo la func_get_args di PHP).

Alla fine ci sono riuscito usando la propretà Array.prototype.