это - как включить javascript на андроиде




Что этот Javascript «требует»? (4)

Я пытаюсь получить Javascript для чтения / записи в базу данных PostgreSQL. Я нашел этот project на github. Я смог получить следующий пример кода для запуска в узле.

var pg = require('pg'); //native libpq bindings = `var pg = require('pg').native`
var conString = "tcp://postgres:[email protected]/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();
});

Затем я попытался запустить его на веб-странице, но ничего не произошло. Я проверил на консоли Javascript, и он просто говорит «require not defined».

Так что же это «требует»? Почему он работает в узле, но не на веб-странице?

Кроме того, прежде чем я получил его для работы в узле, мне пришлось сделать npm install pg . Что это значит? Я заглянул в каталог и не нашел файл pg. Где это было сказано, и как Javascript находит это?


Так что же это «требует»?

require() не является частью стандартного JavaScript API. Но в Node.js это встроенная функция с особым назначением: для загрузки модулей .

Модули - это способ разделить приложение на отдельные файлы, а не на то, чтобы все ваше приложение было в одном файле. Эта концепция также присутствует на других языках с незначительными различиями в синтаксисе и поведении, таких как include C, use PHP, import Python и т. Д.

Одна большая разница между модулями Node.js и браузером JavaScript - это то, как один код сценария получает доступ из кода другого сценария.

  • В браузере JavaScript скрипты добавляются через элемент <script> . Когда они выполняются, все они имеют прямой доступ к глобальной области, «общее пространство» среди всех сценариев. Любой скрипт может свободно определять / изменять / удалять / вызывать что-либо в глобальной области.

  • В Node.js каждый модуль имеет свою собственную область. Модуль не может напрямую обращаться к вещам, определенным в другом модуле, если только он не хочет их раскрывать. Чтобы выставлять вещи из модуля, они должны быть назначены для exports или module.exports . Для доступа к модулю для exports другого модуля или module.exports он должен использовать require() .

В вашем коде var pg = require('pg'); загружает модуль pg , клиент PostgreSQL для Node.js. Это позволяет вашему коду получить доступ к функциям API-интерфейса клиента PostgreSQL через переменную pg .

Почему он работает в узле, но не на веб-странице?

require() , module.exports и module.exports - это API-интерфейсы модульной системы, специфичные для Node.js. Браузеры не реализуют эту модульную систему.

Кроме того, прежде чем я получил его для работы в узле, мне пришлось сделать npm install pg. Что это значит?

NPM - это служба репозитория пакетов, в которой размещены опубликованные модули JavaScript. npm install - это команда, которая позволяет загружать пакеты из своего репозитория.

Где это было сказано, и как Javascript находит это?

У Node.js есть очень подробная документация о том, как модули находят другие модули . Но в сути он помещает все загруженные модули в node_modules в каталог, где вы запускали npm install .


Вы знаете, как при запуске JavaScript в браузере у вас есть доступ к таким переменным, как «окно» или «математика»? Вам не нужно объявлять эти переменные, они были написаны для вас, когда вы хотите.

Ну, когда вы запускаете файл в среде Node.js, есть переменная, которую вы можете использовать. Он называется «модуль». Это объект. Это свойство называется «экспорт». И он работает следующим образом:

В файле, который мы назовем example.js, вы пишете:

example.js

module.exports = "some code";

Теперь вам нужна эта строка «некоторый код» в другом файле.

Назовем другой файл otherFile.js

В этом файле вы пишете:

otherFile.js

let str = require('example.js')

Оператор require () относится к файлу, который вы помещаете внутри него, находит любые данные, хранящиеся в свойстве module.exports. Пусть let = ... часть вашего кода означает, что все, что требует возвращения операторов, сохраняется в переменной str.

Итак, в этом примере конечным результатом является то, что в otherFile.js теперь у вас есть это:

let string = "некоторый код";

Замечания:

имя файла, которое написано внутри оператора require: если это локальный файл, это должен быть путь к файлу example.js. Кроме того, добавлено расширение .js по умолчанию, поэтому мне не пришлось его писать.

Вы делаете что-то подобное, когда требуете библиотеки node.js, такие как Express. В файле express.js есть объект с именем 'module', с именем 'export'.

Итак, это выглядит примерно так: под капотом (я немного новичок, поэтому некоторые из этих деталей могут быть не точными, но это должно показать концепцию:

express.js

module.exports = function() {
    //It returns an object with all of the server methods
    return {
        listen: function(port){},
        get: function(route, function(req, res){}){}
     }
}

Хорошо, давайте сначала начнем с разграничения между Javascript в веб-браузере и Javascript на сервере (CommonJS и Node).

Javascript - это язык, традиционно ограниченный веб-браузером с ограниченным глобальным контекстом, определяемым в основном тем, что стало известно как уровень объектной модели документа (DOM) 0 (API Javascript Netscape Navigator).

Серверный Javascript устраняет это ограничение и позволяет Javascript вызывать различные фрагменты собственного кода (например, библиотеки Postgres) и открытых сокетов.

Теперь require() - это специальный вызов функции, определенный как часть спецификации CommonJS. В узле он разрешает библиотеки и модули в пути поиска узла, теперь обычно определяется как node_modules в том же каталоге (или в каталоге вызываемого файла javascript) или в общесистемном пути поиска.

Чтобы попытаться ответить на оставшийся ваш вопрос, нам нужно использовать прокси-сервер между кодом, запущенным в браузере и сервером базы данных.

Поскольку мы обсуждаем узел, и вы уже знакомы с тем, как выполнить запрос оттуда, было бы целесообразно использовать Node в качестве этого прокси.

В качестве простого примера мы собираемся сделать URL-адрес, который возвращает несколько фактов о Beatle, учитывая имя, как 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.length) {
        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');

Я заметил, что, пока другие ответы объясняют, что требуется, и что он используется для загрузки модулей в узле, они не дали полного ответа о том, как загружать модули узла при работе в браузере.

Это довольно просто сделать. Установите модуль с помощью npm, как описано, и сам модуль будет находиться в папке, обычно называемой node_modules.

Теперь самый простой способ загрузить его в ваше приложение - связать его со своим html с тегом скрипта, который указывает на этот каталог. т.е. если ваш каталог node_modules находится в корне проекта на том же уровне, что и ваш index.html, вы должны записать это в свой index.html:

<script src="node_modules/ng"></script>

Теперь весь этот скрипт будет загружен на страницу - чтобы вы могли напрямую обращаться к своим переменным и методам.

Существуют и другие подходы, которые более широко используются в крупных проектах, таких как загрузчик модулей, например require.js . Из двух я не использовал «Требовать себя», но, по-моему, многие считают, что это путь.





node.js