709 votes

Qu’est-ce Javascript « exiger » ?

Je vais essayer d'obtenir le Javascript pour lire/écrire dans une base de données PostgreSQL. J'ai trouvé ce projet sur github. J'ai été en mesure d'obtenir l'exemple de code suivant à exécuter dans le nœud.

var pg = require('pg'); //native libpq bindings = `var pg = require('pg').native`
var conString = "tcp://postgres:1234@localhost/postgres";

var client = new pg.Client(conString);
client.connect();

//queries are queued and executed one after another once the connection becomes available
client.query("CREATE TEMP TABLE beatles(name varchar(10), height integer, birthday timestamptz)");
client.query("INSERT INTO beatles(name, height, birthday) values($1, $2, $3)", ['Ringo', 67, new Date(1945, 11, 2)]);
client.query("INSERT INTO beatles(name, height, birthday) values($1, $2, $3)", ['John', 68, new Date(1944, 10, 13)]);

//queries can be executed either via text/parameter values passed as individual arguments
//or by passing an options object containing text, (optional) parameter values, and (optional) query name
client.query({
  name: 'insert beatle',
  text: "INSERT INTO beatles(name, height, birthday) values($1, $2, $3)",
  values: ['George', 70, new Date(1946, 02, 14)]
});

//subsequent queries with the same name will be executed without re-parsing the query plan by postgres
client.query({
  name: 'insert beatle',
  values: ['Paul', 63, new Date(1945, 04, 03)]
});
var query = client.query("SELECT * FROM beatles WHERE name = $1", ['John']);

//can stream row results back 1 at a time
query.on('row', function(row) {
  console.log(row);
  console.log("Beatle name: %s", row.name); //Beatle name: John
  console.log("Beatle birth year: %d", row.birthday.getYear()); //dates are returned as javascript dates
  console.log("Beatle height: %d' %d\"", Math.floor(row.height/12), row.height%12); //integers are returned as javascript ints
});

//fired after last row is emitted
query.on('end', function() { 
  client.end();
});

Ensuite, j'ai essayé de le faire fonctionner sur une page web, mais rien ne semblait se passer. J'ai vérifié sur la console Javascript et il dit juste "besoin non défini".

Quel est donc ce "besoin?" Pourquoi faut-il travailler dans le nœud, mais pas dans une page web?

Aussi, avant je l'ai eu à travailler dans le nœud, j'ai eu à faire npm install pg. Qu'est-ce que? J'ai regardé dans l'annuaire et ne pas trouver un fichier pg. Où est-il le mettre, et comment Javascript trouver?

1178voto

Joseph the Dreamer Points 43727

require() n'est pas une partie de votre JavaScript standard.

Dans le contexte de votre question et balises, require() est intégré dans Node.js pour charger des modules, des parties de l'ensemble de l'application, mais dans un autre fichier. Il est similaire à l' include en C et PHP, import en Java, ou using en C#. Mais contrairement à eux, ce qui rend ces modules disponibles dans les environs du champ d'application, require à les rendre disponibles par le biais de la variable que vous avez attribué.

Ce require rendements dépend de ce que le module exposé, à l'aide de exports ou module.exports. Il peut être n'importe quoi, comme une fonction, un objet, etc. Un autre post explique comment require() fonctionne en conjonction avec l' exports.

Dans votre code, il charge l' pg module, qui je pense est un driver PostgreSQL pour NodeJS.


Juste au cas où vous vous demandez pourquoi j'ai dit "dans le contexte de votre question", il y a de la 3e partie les bibliothèques qui utilisent aussi une fonction nommée require de faire quelque chose. C'est très pratique pour identifier qui est qui.

  • RequireJS expose une fonction appelée require à la charge des dépendances avant d'exécuter le code fourni.
  • Neutre, qui concatène les fichiers js, expose également une fonction nommée require. Celui-ci agit beaucoup plus proche de PHP import.
  • Browserify utilise require sur le navigateur, permettant de scripts sur le navigateur pour être écrit NodeJS style.

124voto

Timothy Meade Points 1028

Bon, alors commençons par faire la distinction entre Javascript, Javascript dans un navigateur web, et Javascript sur un serveur (CommonJS et Nœud).

Javascript est un langage traditionnellement confiné à un navigateur web avec un nombre limité contexte global principalement défini par ce qui est venu à être connu comme le Modèle d'Objet de Document (DOM) niveau 0 (Netscape Navigator API Javascript)

Javascript côté serveur, on élimine cette restriction et permet Javascript pour appeler en différents morceaux de code natif (comme la Postgres bibliothèque) et d'ouvrir des sockets.

require() est une fonction spéciale d'appel définie comme la partie de la CommonJS spec. Dans le nœud, il résout les bibliothèques et les modules dans le Nœud de chemin de recherche, généralement définie comme node_modules dans le même répertoire (ou le répertoire de la invoquée fichier javascript) ou à l'échelle du système de recherche de chemin.

Pour essayer de répondre au reste de votre question, nous avons besoin d'utiliser un proxy entre le code qui s'exécute dans le navigateur et le serveur de base de données.

Puisque nous parlons d'Nœud et que vous êtes déjà familier avec la façon d'exécuter une requête à partir de là, il serait judicieux d'utiliser un Nœud en tant que proxy.

Un exemple simple:

Nous allons faire une URL qui renvoie quelques faits au sujet d'un Beatle, donné un nom, comme JSON.

/* your connection code */

var express = require('express');
var app = express.createServer();
app.get('/beatles/:name', function(req, res) {
    var name = req.params.name || '';
    name = name.replace(/[^a-zA_Z]/, '');
    if(!name.lenght) {
        res.send({});
    } else {
        var query = client.query('SELECT * FROM BEATLES WHERE name =\''+name+'\' LIMIT 1');
        var data = {};
        query.on('row', function(row) {
            data = row;
            res.send(data);
        });
    };
});
app.listen(80, '127.0.0.1');

36voto

Sudhir Points 50854

Son utilisé pour charger des modules : un exemple de l’échantillon

Et nous pouvons l’utiliser à l’aide « exigent », comme

require() méthode est utilisée pour charger et mettre en cache les modules Javascript. Donc, si vous voulez charger un module Javascript local, par rapport à une demande de Node.js, vous pouvez simplement utiliser la méthode require(). Exemple :

Espoir qui aide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X