Saya mencoba membuat Javascript untuk membaca / menulis ke database PostgreSQL. Saya menemukan proyek ini di github. Saya bisa mendapatkan kode sampel berikut untuk dijalankan di node.
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();
});
Selanjutnya saya mencoba membuatnya berjalan di halaman web, tetapi sepertinya tidak ada yang terjadi. Saya memeriksa konsol Javascript dan hanya mengatakan "tidak perlu didefinisikan."
Jadi apa yang "dibutuhkan?" Mengapa ia bekerja di simpul tetapi tidak di laman web?
Juga, sebelum saya bisa bekerja di node, saya harus melakukannya npm install pg
. Tentang apa itu? Saya mencari di direktori dan tidak menemukan file pg. Di mana ia meletakkannya, dan bagaimana Javascript menemukannya?
javascript
database
postgresql
node.js
ahli saraf
sumber
sumber
Jawaban:
require()
bukan bagian dari API JavaScript standar. Tetapi di Node.js, ini adalah fungsi bawaan dengan tujuan khusus: untuk memuat modul .Modul adalah cara untuk membagi aplikasi menjadi file yang terpisah daripada memiliki semua aplikasi Anda dalam satu file. Konsep ini juga hadir dalam bahasa lain dengan sedikit perbedaan dalam sintaks dan perilaku, seperti C
include
, Pythonimport
, dan sebagainya.Satu perbedaan besar antara modul Node.js dan JavaScript browser adalah bagaimana kode satu skrip diakses dari kode skrip lain.
Di JavaScript browser, skrip ditambahkan melalui
<script>
elemen. Ketika mereka mengeksekusi, mereka semua memiliki akses langsung ke ruang lingkup global, "ruang bersama" di antara semua skrip. Setiap skrip dapat dengan bebas menentukan / memodifikasi / menghapus / memanggil apa pun di lingkup global.Di Node.js, setiap modul memiliki cakupannya sendiri. Modul tidak dapat secara langsung mengakses hal-hal yang didefinisikan dalam modul lain kecuali modul itu memilih untuk mengeksposnya. Untuk mengekspos sesuatu dari modul, mereka harus ditugaskan ke
exports
ataumodule.exports
. Agar modul dapat mengakses modul lainexports
ataumodule.exports
, modul itu harus digunakanrequire()
.Dalam kode Anda,
var pg = require('pg');
muatpg
modul, klien PostgreSQL untuk Node.js. Ini memungkinkan kode Anda untuk mengakses fungsionalitas API klien PostgreSQL melaluipg
variabel.require()
,module.exports
danexports
API dari sistem modul yang khusus untuk Node.js. Browser tidak menerapkan sistem modul ini.NPM adalah layanan repositori paket yang menampung modul JavaScript yang diterbitkan.
npm install
adalah perintah yang memungkinkan Anda mengunduh paket dari repositori mereka.Cli npm menempatkan semua modul yang diunduh dalam
node_modules
direktori tempat Anda berlarinpm install
. Node.js memiliki dokumentasi yang sangat terperinci tentang bagaimana modul menemukan modul lain yang mencakup menemukannode_modules
direktori.sumber
require
dukungannya sendiri ?include/require[_once]
( tautan php.net ), bukanuse
, yang merupakan kata kunci aliasing .Baiklah, jadi mari kita mulai dengan membuat perbedaan antara Javascript di browser web , dan Javascript di server (CommonJS dan Node).
Javascript adalah bahasa yang secara tradisional terbatas pada browser web dengan konteks global terbatas yang didefinisikan sebagian besar oleh apa yang kemudian dikenal sebagai Document Object Model (DOM) level 0 (Netscape Navigator Javascript API).
Javascript sisi-server menghilangkan batasan itu dan memungkinkan Javascript untuk memanggil berbagai bagian kode asli (seperti pustaka Postgres) dan membuka soket.
Sekarang
require()
adalah panggilan fungsi khusus yang didefinisikan sebagai bagian dari spesifikasi CommonJS. Dalam node, ia menyelesaikan perpustakaan dan modul di jalur pencarian Node, sekarang biasanya didefinisikan sebagainode_modules
dalam direktori yang sama (atau direktori file javascript yang dipanggil) atau jalur pencarian di seluruh sistem.Untuk mencoba menjawab sisa pertanyaan Anda, kami perlu menggunakan proxy antara kode yang berjalan di browser dan server database.
Karena kami sedang mendiskusikan Node dan Anda sudah terbiasa dengan cara menjalankan kueri dari sana, masuk akal untuk menggunakan Node sebagai proxy itu.
Sebagai contoh sederhana, kita akan membuat URL yang mengembalikan beberapa fakta tentang Beatle, diberi nama, sebagai JSON.
sumber
createServer
ini membingungkan ... itu menunjukkan bahwa saya hanya bisa mau membuat server sepanjang waktu, kapan pun saya mau ... kontras dengan paradigma WAMP saya: sekitar 5 tahun yang lalu saya instal (mis. 'dibuat ') sebuah server di laptop windowsXP saya, dan saya tidak pernah' membuat 'server lain sejak ... sekarang tiba-tiba saya bisa mulai membuat server ... ini membingungkan ..C:\Program Files\nodejs\
file atau direktori bernamaexpress
, saya tidak mendapatkan kecocokan ... jadi dari mana asalnya ...npm
. Anda dapat menemukan informasi lebih lanjut di sini: expressjs.comIni digunakan untuk memuat modul. Mari kita gunakan contoh sederhana.
Dalam file
circle_object.js
:Kita dapat menggunakan ini melalui
require
, seperti:The
require()
metode yang digunakan untuk beban dan cache modul JavaScript. Jadi, jika Anda ingin memuat modul JavaScript relatif lokal ke aplikasi Node.js, Anda bisa menggunakanrequire()
metode ini.Contoh:
sumber
Saya perhatikan bahwa sementara jawaban lain menjelaskan apa yang diperlukan dan bahwa itu digunakan untuk memuat modul di Node, mereka tidak memberikan jawaban penuh tentang cara memuat modul simpul saat bekerja di Browser.
Ini cukup sederhana untuk dilakukan. Instal modul Anda menggunakan npm seperti yang Anda jelaskan, dan modul itu sendiri akan terletak di folder yang biasanya disebut node_modules.
Sekarang cara termudah untuk memuatnya ke dalam aplikasi Anda adalah dengan merujuknya dari html Anda dengan tag skrip yang menunjuk pada direktori ini. yaitu jika direktori node_modules Anda berada di root proyek pada tingkat yang sama dengan index.html Anda, Anda akan menulis ini di index.html Anda:
Seluruh skrip itu sekarang akan dimuat ke halaman - sehingga Anda dapat mengakses variabel dan metodenya secara langsung.
Ada pendekatan lain yang lebih banyak digunakan dalam proyek-proyek yang lebih besar, seperti loader modul seperti require.js . Dari keduanya, saya belum menggunakan Tuntut diri saya, tetapi saya pikir itu dianggap oleh banyak orang cara untuk pergi.
sumber
<name of module>
? Ini adalah struktur direktori saya. Folder root adalahxyz
.xyz/index.html
menunjuk kexyz/js/scripts.js
menggunakanscript tag
.xyz/js/scripts.js
memiliki koderequire('./module1.js');require('./module2.js');
.module1.js
Sayamodule2.js
juga dixyz/js
folder. Sekarang, bagaimana cara saya membuatscripts.js
tersedia untuk browser?Anda tahu bagaimana ketika Anda menjalankan JavaScript di browser, Anda memiliki akses ke variabel seperti "jendela" atau Matematika? Anda tidak harus mendeklarasikan variabel-variabel ini, variabel-variabel itu telah ditulis untuk Anda gunakan kapan pun Anda mau.
Nah, ketika Anda menjalankan file di lingkungan Node.js, ada variabel yang bisa Anda gunakan. Ini disebut "modul" Ini adalah objek. Ia memiliki properti yang disebut "ekspor." Dan kerjanya seperti ini:
Dalam file yang kami beri nama example.js, Anda menulis:
contoh.js
Sekarang, Anda ingin string ini "beberapa kode" di file lain.
Kami akan memberi nama file lain otherFile.js
Dalam file ini, Anda menulis:
otherFile.js
Pernyataan membutuhkan () masuk ke file yang Anda masukkan ke dalamnya, menemukan data apa pun yang disimpan di properti module.exports. Bagian let str = ... dari kode Anda berarti bahwa apa pun yang membutuhkan pengembalian pernyataan disimpan ke variabel str.
Jadi, dalam contoh ini, hasil akhirnya adalah di otherFile.js Anda sekarang memiliki ini:
biarkan string = "some code";
biarkan str = ('./example.js').module.exports
catatan:
nama file yang tertulis di dalam pernyataan membutuhkan: Jika itu adalah file lokal, itu harus path file ke example.js. Juga, ekstensi .js ditambahkan secara default, jadi saya tidak perlu menulisnya.
Anda melakukan sesuatu yang serupa ketika membutuhkan pustaka node.js, seperti Express. Dalam file express.js, ada objek bernama 'modul', dengan properti bernama 'ekspor'.
Jadi, sepertinya ada di sepanjang garis ini, di bawah tenda (saya agak pemula sehingga beberapa detail ini mungkin tidak tepat, tetapi untuk menunjukkan konsep:
express.js
Jika Anda memerlukan modul, tampilannya seperti ini: const moduleName = require ("module-name");
Jika Anda memerlukan file lokal, tampilannya seperti ini: const localFile = require ("./ path / to / local-file");
(perhatikan ./ di awal nama file)
Perhatikan juga bahwa secara default, ekspor adalah objek .. misalnya module.exports = {} Jadi, Anda dapat menulis module.exports.myfunction = () => {} sebelum memberikan nilai ke module.exports. Tetapi Anda juga dapat mengganti objek dengan menulis module.exports = "Saya bukan objek lagi."
sumber
Dua rasa module.exports / membutuhkan:
(lihat disini )
File ekspor rasa 1 (misc.js):
file lain:
File ekspor rasa 2 (user.js):
file lain:
sumber