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)

Ammetto: l'altra settimana ho fatto un casino con i moduli installati tramite NPM, e l'unico modo per rimettere a posto era disinstallarli tutti e reinstallare i necessari.

Vi spiego i passaggi che ho fatto (può capitare a tutti di fare qualche casino laughing).

Mi sono trovato abbastanza bene con Apache Cordova per lo sviluppo di alcune app mobile.

L'unica cosa è che, di primo acchitto, NPM non è proprio immediato.

Soprattutto quando dobbiamo aggiornare un pacchetto, e di conseguenza un progetto che lo usa.

Quindi, se abbiamo un progetto con Apache Cordova, e aggiornamo il framework, come possiamo aggiornare anche la versione del progetto?

Sto usando Ionic per una app, e mi trovo abbastanza bene.

L'unica rottura è la serie di librerie da tenere aggiornate:

  • Node.js -> richiesto come base
  • Apache Cordova -> richiesto come base per Ionic
  • AngularJS -> i progetti di Ionic si basano su questo
  • Ionic
  • i plugin vari

Ed inoltre dobbiamo farlo sia a livello di sistema che di progetto.