Tumgik
#backus-naur
nerdreadss · 7 months
Note
You might already know this, but the Hellblazer Index only goes up to about 2015, and there have been a lot more publications featuring John since. Most of them are kinda shit tbh, but I think all Hellblazer fans will wholeheartedly endorse the Sandman Universe Hellblazer run by Si Spurrier. It's truly the best Constantine we've gotten since the original 250-issue Vertigo series, and it's just been announced that it's getting a sequel next year!! Also, especially since you like Gemma I recommend Spurrier's other series Damn Them All. It's an original story, but it's essentially a Hellblazer sequel protagonized by Gemma with the serial numbers filed off.
i am ✍️ writing this down! thank you so much! tbh i'm reading everything i can get my grubby lil hellblazer hands on and following the guide i mentioned before (it's in my pinned post but i'll link it here). i'll read through things that are shitty so that i understand references and shit, but i will complain about it the whole time. i've also got a bud that's read through everything as well, and they are helping with the order of things and being my emotional support friend for me to lose my FUCKING mind occasionally. i am not lying when i tell you i actually sent them a five minute audio while in a cvs parking lot after reading the last issue. was genuinely losing my mind, LITERALLY was screaming and crying at the same time.
i love him a normal amount or w/e.
6 notes · View notes
codehunter · 2 years
Text
How to search in array of object in mongodb
Suppose the mongodb document(table) 'users' is
{ _id: 1, name: { first: 'John', last: 'Backus' }, birth: new Date('Dec 03, 1924'), death: new Date('Mar 17, 2007'), contribs: ['Fortran', 'ALGOL', 'Backus-Naur Form', 'FP'], awards: [ { award: 'National Medal', year: 1975, by: 'NSF' }, { award: 'Turing Award', year: 1977, by: 'ACM' } ]}// ...and other object(person)s
I want to find the person who has the award 'National Medal' and must be awarded in year 1975There could be other persons who have this award in different years.
How can I find this person using award type and year. So I can get exact person.
https://codehunter.cc/a/javascript/how-to-search-in-array-of-object-in-mongodb
0 notes
northcore · 2 years
Text
me when im trying to make a new context-free grammar but dionysus keeps fucking it up (and also im australian)
Tumblr media
0 notes
sakshimohitedf · 4 years
Link
0 notes
Text
Each time I see the acronym BNF on this site my first thought is “What has that Backus-Naur form done now?”
2 notes · View notes
Text
Not Known Facts About Sign Brackets
If you merely want to attach a directional marker or incorporate a sign to a pole that has already been signed on it, You need to use the two ?” Put up Mount Bracket. This bracket is about seven? lengthy and is also for being connected into the pole with steel bands.
Type and use guides originating while in the news industry of the twentieth century, including the AP Stylebook, advocate the use of sq. brackets since "They can't be transmitted above news wires.
High school athletes ultimately have some plaques to chase. And it looks like All people's coming to the social gathering. Pairings had been drawn up for Part II baseball, softball and boys lacrosse tournaments ...
Tumblr media
The brackets are then galvanized to prevent them from rusting. We could depart them galvanized and unpainted for just a £five discount.
There might be numerous other that makes use of likewise, depending on the language at hand. In syntax diagrams, They're used for optional portions, like in extended Backus–Naur form.
?+? ?-? moreover and minus signs  ?×? multiplication sign  ?÷? division sign  ?~? tilde  ?±? ?±? in sign brackets addition–minus sign
In Bodily sciences and statistical mechanics, angle brackets are utilized to denote an average with time or about An additional constant parameter. For example:
sign bracket can be found in metals that might be free from corrosion and rust together within Wooden, bamboo and also other resources.
You should enter a sound email deal with. Appears as you have already got an account! Please Log in to subscribe. You have by now signed up for many newsletters, but you haven't confirmed your tackle.
Sq. brackets (also known as brackets, specifically in American English) are predominantly used to enclose phrases additional by a person aside from the initial writer or speaker, generally to explain your situation:
The following three hanging brackets are of the welded design, made from steel and powder-coated black or white.
We keep a large inventory of traffic sign mounting hardware in stock for a fast turnaround. Mounting hardware is shipped the same or subsequent day.
TMB-Thanachart Lender (ttb) has released new economical products and solutions for top Web worth customers as A part of its strategy to keep this phase just after an entire rebranding with the merged lender past thirty day period.
0 notes
libertineangel · 4 years
Text
Every time I read some fandom meta post that uses the acronym BNF I get confused because my first thought is to wonder how and why well-known members of fandoms want to use Backus-Naur Form, because I don't imagine any fandom will get much content if they have to present it explicitly as "<theory> ::= <assertion> <source>", and fuck knows how artists would cope.
0 notes
ibelong2u · 19 years
Text
Peter Naur
The subject of my essay is Peter Naur, the latest recipient of the A.M. Turing Award. The Association of Computing Machinery announced him as the winner for the year 2005, for his pioneering work on defining the Algol 60 programming language. The Turing Award is the most prestigious technical award in computer science given to individuals who have made contributions of lasting and major technical importance to the computer field. Dr. Naur's contribution is considered to have transformed the way we define programming languages today. Dr. Naur was further instrumental in establishing software engineering as a discipline and the development of computer science as a curriculum.
Peter Naur began his career as an astronomer, but his encounter with computers let to a change of profession. In 1959, Peter Naur joined the staff of the compiler design group at a Danish computer company where he organized the Algol Bulletin and was the editor of the report that defined Algol 60. He became a professor at the Copenhagen University in 1969, retiring in 1998.
The major areas of Peter Naur’s research were design, structure and performance of computer programs and algorithms. The ‘N’ in the BNF notation (Backus-Naur form), used in the description of the syntax for most programming languages, comes from his last name. Dr. Naur’s major contribution is towards the creation of the Algol 60 programming language. In the words of Dijkstra, the development of Algol 60 as "an absolute miracle" that signaled the birth of what he called ‘computing science’ because it showed the first ways in which automatic computing could and should become a topic of academic concern. Many of the programming constructs that are a general standard today were first introduced in the Algol Report authored by Peter Naur.  He has made many other contributions in the field of software engineering methodologies and life-cycle models.  Since recent years, he has also shown a lot of interest in philosophy.
I was personally not aware about Dr. Peter Naur until I read about him receiving the award. I casually looked him up out of curiosity and was impressed after realizing his contribution to computer science. As per the article in Wikipedia, Peter Naur is one of the major contributors for pioneering the growth in areas such as software engineering and software architecture.
Peter Naur is widely acknowledged as the driving intellectual force behind the definition of Algol 60. As I read further, I found it inspirational to know that one individual’s unconventional way of thinking can have such a major influence on the way society functions 50 years later. Naur heavily criticized the behaviorist view of human beings as complex computers, and he criticized the concept of artificial intelligence in the sense of computers that could reason in a manner that was comparable to that of human beings. Today we see his concepts materializing. It takes a certain amount of insight and skill to make an accurate prediction so many years into the future.
Dr. Naur, by the way, dislikes the term computer science and had suggested that it be called datalogy. Another interesting fact I found out was that his interests in science and spirit of inquiry was originally instigated out of his interest in astronomy. It was only later, that he moved to Computer Science.
0 notes
prachivermablr · 4 years
Link
0 notes
charlietokyojp · 7 years
Text
バッカス・ナウア記法(Backus-Naur form, BNF)
応用情報技術者試験(AP)の古い過去問を見ていたらバッカス・ナウア記法が出てきた。ソフトウェア開発技術者試験と呼ばれていた頃の平成20年秋期の試験問題。平成26年春期にも出題されているようだが、検索するとほぼAP過去問しか出てこない。出番が少ないだろう知識の1つのように思う。
次のBNFにおいて非終端記号<A>から生成される文字列はどれか。 <R0> ::=0|3|6|9 <R1> ::=1|4|7 <R2> ::=2|5|8 <A> ::=<R0>|<A> <R0>|<B> <R2>|<C>< R1> <B> ::=<R1>|<A> <R1>|<B> <R0>|<C>< R2> <C> ::=<R2>|<A> <R2>|<B> <R1>|<C> <R0>
答え選択肢:ア:123 イ:124 ウ:127 エ:128
で答えはアの123。
「|」は“or”であり正規表現と同じで、「::=」は左辺に対し右辺の定義を行うというプログラミング言語お決まりのサイン。それを再帰的に行えるのがBNFの特徴。
再帰的というのは直前の自分自身を呼び出し参照したり自分自身を上書きしたり(再定義したり)すること。例えば、
Aは数字である。 Bはアルファベットである。 AはABである。→“数字+アルファベット”である。
という具合に、3行目の「A」は直前まで「数字」だったが、数字である自分を参照しつつ「B」を追加したのがこれからの自分(A)であると再定義している。
問題文の4行目をつまんでみると、
<A> ::=<R0>|<A> <R0>|<B> <R2>|<C>< R1>
とは、
「<A>」は、「<R0>」または「<A>と<R0>」もしくは「<B>と<R2>」或いは「<C>と<R1>」である。
という定義。
答えの4つの選択肢はいずれも「1」で始まっているため、数字の「1」のみ(前後に何も付かない<R1>)を持っているのは「<B>」(「1または4もしくは7」)のみ。よって“「1」に続く「2」”は「<B><R2>」(「<R2>」の定義は「2または5もしくは8」)と表現できる。
この「<B><R2>」を持っているのは「<A>」だから「12」は「<A>」のみで表現できる。
そして答えアの「123」をつくる場合、“「<A>」と「3」”だから「<A><R0>」(<R0>は「0または3もしくは6或いは9」)と考える。
よって「<A><R0>」を持っているのは「<A>」だから、「123」を生成できるのは「<A>」であると言える。
全部やってみるとする。
答えイの「124」は「<B>」で表現できる。最初の2文字(12)はアと同じで「<B><R2>」だから「<A>」であり、最後の「4」は「<R1>」だから「<A><R1>」となり、それを持っているのは「<B>」のみ。
答えウの「127」も「<B>」で表現できる。ア・イと同じく最初の2文字は「<B><R2>」だから「<A>」であり、最後の「7」は「<R1>」だから「<A><R1>」となり、それを持っているのは「<B>」のみ。
答えエの「128」は「<C>」で表現できる。ア・イと同じく最初の2文字は「<B><R2>」だから「<A>」であり、最後の「8」は「<R2>」だから「<A><R2>」となり、それを持っているのは「<C>」のみ。
「120」なら<A><R0>で<A>。 「121」なら<A><R1>で<B>。 「122」なら<A><R2>で<C>。 「125」なら<A><R2>で<C>。 「126」なら<A><R0>で<A>。 「129」なら<A><R0>で<A>。
「130」なら<B><R0>で<B>。 「131」なら<B><R1>で<C>。 「132」なら<B><R2>で<A>。 「133」なら<B><R0>で<B>。 「134」なら<B><R1>で<C>。 「135」なら<B><R2>で<A>。
「222」なら<B><R2>で<A>。 「356」なら<C><R0>で<C>。 「491」なら<B><R1>で<C>。 「587」なら<B><R1>で<C>。 「603」なら<A><R0>で<A>。 「750」なら<A><R0>で<A>。 「849」なら<A><R0>で<A>。 「928」なら<C><R2>で<B>。
といった具合。
応用情報技術者試験の平成23年特別でも類似問題が出題されている。
応用情報技術者試験は、各カテゴリの技術者がそれぞれの専門分野でしか使わないような問題が多く、3つくらいに分割してもイイくらい。日本人の平均的な守備範囲に対し広すぎ、そこでつまずいて高度試験に進めない人が多いんじゃなかろうか。
2 notes · View notes
blogbridge182 · 3 years
Text
Programming Languages
Tumblr media
It is the core language of the Poplog programming environment developed originally by the University of Sussex, and recently in the School of Computer Science at the University of Birmingham which hosts the Poplog website, It is often used to introduce symbolic programming techniques to programmers of more conventional languages like Pascal. The aim of this list of programming languages is to include all notable programming languages in existence, both those in current use and historical ones, in alphabetical order. Dialects of BASIC, esoteric programming languages, and markup languages are not included.
Programming Languages Definition
Types Of Programming Languages
Top 20 Computer Programming Languages
Article
Language types
Algorithmic languages
Business-oriented languages
Education-oriented languages
Object-oriented languages
Document formatting languages
World Wide Web display languages
Elements of programming
Please select which sections you would like to print:
While every effort has been made to follow citation style rules, there may be some discrepancies. Please refer to the appropriate style manual or other sources if you have any questions.
Our editors will review what you’ve submitted and determine whether to revise the article.
Join Britannica's Publishing Partner Program and our community of experts to gain a global audience for your work! David Hemmendinger
Professor Emeritus, Department of Computer Science, Union College, Schenectady, New York. Coeditor of Encyclopedia of Computer Science, 4th ed. (2000).
Computer programming language, any of various languages for expressing a set of detailed instructions for a digital computer. Such instructions can be executed directly when they are in the computer manufacturer-specific numerical form known as machine language, after a simple substitution process when expressed in a corresponding assembly language, or after translation from some “higher-level” language. Although there are many computer languages, relatively few are widely used.
Computers and Technology Quiz
Computers host websites composed of HTML and send text messages as simple as..LOL. Hack into this quiz and let some technology tally your score and reveal the contents to you.
Machine and assembly languages are “low-level,” requiring a programmer to manage explicitly all of a computer’s idiosyncratic features of data storage and operation. In contrast, high-level languages shield a programmer from worrying about such considerations and provide a notation that is more easily written and read by programmers.
Language types
Machine and assembly languages
A machine language consists of the numeric codes for the operations that a particular computer can execute directly. The codes are strings of 0s and 1s, or binary digits (“bits”), which are frequently converted both from and to hexadecimal (base 16) for human viewing and modification. Machine language instructions typically use some bits to represent operations, such as addition, and some to represent operands, or perhaps the location of the next instruction. Machine language is difficult to read and write, since it does not resemble conventional mathematical notation or human language, and its codes vary from computer to computer.
Assembly language is one level above machine language. It uses short mnemonic codes for instructions and allows the programmer to introduce names for blocks of memory that hold data. One might thus write “add pay, total” instead of “0110101100101000” for an instruction that adds two numbers.
Get a Britannica Premium subscription and gain access to exclusive content. Subscribe Now
Assembly language is designed to be easily translated into machine language. Although blocks of data may be referred to by name instead of by their machine addresses, assembly language does not provide more sophisticated means of organizing complex information. Like machine language, assembly language requires detailed knowledge of internal computer architecture. It is useful when such details are important, as in programming a computer to interact with peripheral devices (printers, scanners, storage devices, and so forth).
Algorithmic languages
Algorithmic languages are designed to express mathematical or symbolic computations. They can express algebraic operations in notation similar to mathematics and allow the use of subprograms that package commonly used operations for reuse. They were the first high-level languages.
Programming Languages Definition
FORTRAN
The first important algorithmic language was FORTRAN (formula translation), designed in 1957 by an IBM team led by John Backus. It was intended for scientific computations with real numbers and collections of them organized as one- or multidimensional arrays. Its control structures included conditional IF statements, repetitive loops (so-called DO loops), and a GOTO statement that allowed nonsequential execution of program code. FORTRAN made it convenient to have subprograms for common mathematical operations, and built libraries of them.
FORTRAN was also designed to translate into efficient machine language. It was immediately successful and continues to evolve.
ALGOL
ALGOL (algorithmic l https://blogbridge182.tumblr.com/post/653002829657669632/keepassxc-firefox. anguage) was designed by a committee of American and European computer scientists during 1958–60 for publishing algorithms, as well as for doing computations. Like LISP (described in the next section), ALGOL had recursive subprograms—procedures that could invoke themselves to solve a problem by reducing it to a smaller problem of the same kind. ALGOL introduced block structure, in which a program is composed of blocks that might contain both data and instructions and have the same structure as an entire program. Block structure became a powerful tool for building large programs out of small components.
ALGOL contributed a notation for describing the structure of a programming language, Backus–Naur Form, which in some variation became the standard tool for stating the syntax (grammar) of programming languages. ALGOL was widely used in Europe, and for many years it remained the language in which computer algorithms were published. Many important languages, such as Pascal and Ada (both described later), are its descendants.
C
The C programming language was developed in 1972 by Dennis Ritchie and Brian Kernighan at the AT&T Corporation for programming computer operating systems. Its capacity to structure data and programs through the composition of smaller units is comparable to that of ALGOL. It uses a compact notation and provides the programmer with the ability to operate with the addresses of data as well as with their values. This ability is important in systems programming, and C shares with assembly language the power to exploit all the features of a computer’s internal architecture. C, along with its descendant C++, remains one of the most common languages.
Business-oriented languages
COBOL
COBOL (common business oriented language) has been heavily used by businesses since its inception in 1959. A committee of computer manufacturers and users and U.S. government organizations established CODASYL (Committee on Data Systems and Languages) to develop and oversee the language standard in order to ensure its portability across diverse systems.
COBOL uses an English-like notation—novel when introduced. Business computations organize and manipulate large quantities of data, and COBOL introduced the recorddata structure for such tasks. A record clusters heterogeneous data—such as a name, an ID number, an age, and an address—into a single unit. This contrasts with scientific languages, in which homogeneous arrays of numbers are common. Records are an important example of “chunking” data into a single object, and they appear in nearly all modern languages.
key people
related topics
programming language
язык программирования Syn : computer language, machine language(компьютерное) язык программирования
Tumblr media
Большой англо-русский и русско-английский словарь. 2001.
Смотреть что такое 'programming language' в других словарях:
Types Of Programming Languages
Programming language — lists Alphabetical Categorical Chronological Generational A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that… … Wikipedia
programming language — ➔ language * * * programming language UK US noun (C) ► COMPUTER LANGUAGE(Cf. ↑computer language) … Financial and business terms
programming language — Language Lan guage, n. (OE. langage, F. langage, fr. L. lingua the tongue, hence speech, language; akin to E. tongue. See (Tongue), cf. (Lingual).) (1913 Webster) 1. Any means of conveying or communicating ideas; specifically, human speech; the… … The Collaborative International Dictionary of English
Programming Language 1 — noun A computer programming language which combines the best qualities of commercial and scientific oriented languages (abbrev PL/1) • • • Main Entry: ↑programme … Useful english dictionary
Programming Language — (engl.), Programmiersprache … Universal-Lexikon
Image to pdf converter. programming language — noun (computer science) a language designed for programming computers • Syn: ↑programing language • Topics: ↑computer science, ↑computing • Hypernyms: ↑artificial language … Useful english dictionary
programming language — UK / US noun (countable) Word forms programming language : singular programming language plural programming languages computing a set of words and rules for writing computer programs … English dictionary
programming language — programavimo kalba statusas T sritis automatika atitikmenys: angl. programming language vok. Programmiersprache, f rus. язык программирования, m pranc. langage de programmation, m … Automatikos terminų žodynas
programming language — programavimo kalba statusas T sritis informatika apibrėžtis Žymenų sistema ↑programoms (↑algoritmams) užrašyti. Kalbos abėcėlę sudaro skaitmenys, raidės, operacijų ir skyrybos ženklai. Eshop deals reddit. Iš abėcėlės ženklų sudaromos programavimo kalbos… … Enciklopedinis kompiuterijos žodynas
programming language — a high level language used to write computer programs, as COBOL or BASIC, or, sometimes, an assembly language. (1955 60) * * * Language in which a computer programmer writes instructions for a computer to execute. Some languages, such as COBOL,… … Universalium
programming language — A language used to write a program that the computer can execute. Almost 200 programming languages exist. An example is the popular C language, which is well suited to a variety of computing tasks. With C, programmer scan write anything from a … Dictionary of networking
Книги
Beginning Programming with Python For Dummies, John Mueller Paul. Learn Python—the fun and easy way—and get in the programming game today! Python is one of the fastest growing programming languages, and no wonder. It requires three to five times less time… ПодробнееКупить за 2275.73 рубэлектронная книга
Beginning R. The Statistical Programming Language, Mark Gardener. Conquer the complexities of this open source statistical language R is fast becoming the de facto standard for statistical computing and analysis in science, business, engineering, and… ПодробнееКупить за 2275.73 рубэлектронная книга
Beginning Programming with Java For Dummies, Barry Burd A. Learn to speak the Java language like the pros Are you new to programming and have decided that Java is your language of choice? Are you a wanna-be programmer looking to learn the hottest… ПодробнееКупить за 1950.53 рубэлектронная книга
Другие книги по запросу «programming language» >>
Top 20 Computer Programming Languages
Tumblr media
0 notes
vpsgoll · 4 years
Text
ساخت و استقرار سرور GraphQL با Node.js و MongoDB
GraphQL در سال 2015 توسط فیس بوک به عنوان یک زبان پرس و جو برای API ها منتشر شد که پرس و جو و جهش داده ها از مجموعه داده های مختلف را آسان می کند. از یک نقطه پایانی واحد ، می توانید چندین منبع داده را با یک درخواست POST منفرد جستجو کنید و به جش واردارید. GraphQL برخی از نقص طراحی معمول در معماری REST API را برطرف می کند ، مانند موقعیت هایی که نقطه انتهایی اطلاعات بیشتری را نسبت به آنچه در واقع لازم دارید برمی گرداند. همچنین ، هنگام استفاده از API های REST ممکن است برای جمع آوری تمام اطلاعات مورد نیاز خود، ممکن است نیاز به ارسال درخواست به چند مورد از نقاط انتهایی REST داشته باشید – وضعیتی که به آن مشکل n + 1 گفته می شود. نمونه ای از این موارد وقتی پیش می آید که می خواهید اطلاعات کاربر را نشان دهید ، اما باید اطلاعاتی از قبیل جزئیات شخصی و آدرس ها را از نقاط مختلف جمع آوری کنید. این مشکلات برای GraphQL اعمال نمی شوند زیرا تنها یک نقطه پایانی دارد که می تواند داده ها را از چندین مجموعه بازگرداند. داده بازگشتی به پرس و جویی که به این نقطه پایانی ارسال شده بستگی دارد. در این پرس و جو ساختار داده ای را که می خواهید دریافت کنید ، از جمله هر مجموعه داده تو در تو را تعریف می کنید. علاوه بر یک پرس و جو ، می توانید از یک جهش برای تغییر داده ها روی یک سرور مجازی GraphQL و یک اشتراک نیز برای مشاهده تغییرات در داده استفاده کنید. برای کسب اطلاعات بیشتر در مورد GraphQL و مفاهیم آن ، می توانید به مطالب موجود در وب سایت رسمی مراجعه کنید. از آنجا که GraphQL یک زبان پرس و جو با انعطاف پذیری زیاد است ، به خصوص با داده های مبتنی بر مستندات مانند MongoDB ترکیب می شود. هر دو فناوری مبتنی بر طرحواره های سلسله مراتبی ، تایپ شده هستند و در جامعه جاوا اسکریپت محبوب میباشند. همچنین ، داده های MongoDB به عنوان اشیاء JSON ذخیره می شوند ، بنابراین هیچ تجزیه و تحلیل اضافی در سرور مجازی GraphQL لازم نیست. در این آموزش ، یک سرور مجازی GraphQL با Node.js ایجاد خواهید کرد و می توانید داده ها را از یک پایگاه داده MongoDB که در اوبونتو 18.04 در حال اجرا است ، پرس و جو کنید و جهش دهید. در پایان این آموزش ، شما می توانید با استفاده ا�� یک نقطه پایانی واحد، هم با ارسال درخواست به سرور مجازی به طور مستقیم از طریق ترمینال و هم با استفاده از رابط پیش ساخته playground در GraphiQL به داده های موجود در بانک اطلاعاتی خود دسترسی داشته باشید. با استفاده از این playground می توانید محتویات سرور مجازی GraphQL را با ارسال پرس و جوها ، جهش ها و اشتراک ها کشف کنید. همچنین ، می توانید نمایش های بصری از طرح هایی را که برای این سرور مجازی تعریف شده است ، پیدا کنید. در پایان این آموزش ، شما از playground GraphiQL برای ارتباط سریع سرور مجازی GraphQL خود استفاده خواهید کرد:
پیش نیازها قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت: ⦁ سرور مجازی Ubuntu 18.04 که با پیروی از راهنمای تنظیم اولیه سرور مجازی Ubuntu 18.04 تنظیم شده باشد، شامل یک کاربر sudo غیر ریشه و فایروال نیز باشد. ⦁ نصب MongoDB و اجرای آن در اوبونتو 18.04 که می توانید با دنبال کردن آموزش نحوه نصب MongoDB در اوبونتو 18.04 آن را تنظیم کنید. ⦁ Nginx نصب شده ، همانطور که در نحوه نصب Nginx در Ubuntu 18.04 مشاهده می شود ، از جمله مرحله 4 – تنظیم بلوک های سرور مجازی. ⦁ برای دسترسی از راه دور به سرور مجازی GraphQL ، به یک نام دامنه کاملاً واجد شرایط (FQDN) و یک رکورد A نیاز دارید که به IP سرور مجازی شما اشاره کند. در صورت داشتن حساب vpsgol ، می توانید اطلاعات بیشتری در مورد این مورد با خواندن طریق مقدمه DNS اصطلاحات ، مؤلفه ها و مفاهیم ، یا اسناد دامنه و DNS کسب کنید. ⦁ آشنایی با JavaScript ، که می توانید از مجموعه نحوه کدنویسی در جاواسکریپت بیاموزید. مرحله 1 – تنظیم بانک اطلاعاتی MongoDB قبل از ایجاد سرور مجازی GraphQL ، اطمینان حاصل کنید که پایگاه داده شما درست پیکربندی شده باشد ، تأیید هویت آن فعال باشد و با داده های نمونه پر شده باشد. برای این کار باید از اعلان خط فرمان به سرور مجازی Ubuntu 18.04 که پایگاه داده MongoDB است متصل شوید. کلیه مراحل این آموزش در این سرور مجازی انجام خواهد شد. بعد از برقراری اتصال ، دستور زیر را اجرا کنید تا بررسی کنید که آیا MongoDB فعال و روی سرور مجازی شما فعال است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را در ترمینال خود مشاهده خواهید کرد ، نشان می دهد که بانک اطلاعاتی MongoDB به طور فعال در حال اجرا است: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
قبل از ایجاد دیتابیس که داده های نمونه را در آن ذخیره می کنید ، ابتدا باید یک کاربر ادمین ایجاد کنید ، زیرا کاربران عادی در یک پایگاه داده خاص قرار می گیرند. می توانید با اجرای دستور زیر که پوسته MongoDB را باز می کند ، این کار را انجام دهید: ⦁ $ mongo ⦁ با پوسته MongoDB دسترسی مستقیم به پایگاه داده MongoDB خواهید داشت و می توانید کاربران یا بانکهای اطلاعاتی و داده های پرس و جو ایجاد کنید. در داخل این پوسته ، دستور زیر را اجرا کنید که یک کاربر ادمین جدید را به MongoDB اضافه می کند. می توانید کلمات کلیدی هایلایت شده را با نام کاربری و رمز ورود خود جایگزین کنید ، اما فراموش نکنید که آنها را در جایی بنویسید. ⦁ mongo> use admin ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “admin_username”, ⦁ mongo> pwd: “admin_password”, ⦁ ⦁ mongo> roles: [{ role: “root”, db: “admin”}] ⦁ ⦁ mongo> })
خط اول دستور قبلی دیتابیس را با نام ادمین انتخاب می کند ، یعنی همان دیتابیسی که تمام نقش های ادمین در آن ذخیره می شود. با روش db.createUser () می توانید کاربر واقعی ایجاد کرده و نام کاربری ، رمزعبور و نقش های آن را تعریف کنید. اجرای این فرمان خروجی زیر را برمی گرداند: Output Successfully added user: { “user” : “admin_username”, “roles” : [ { “role” : “root”, “db” : “admin” } ] }
اکنون می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، دوباره وارد پوسته MongoDB شوید ، اما این بار با کاربر adminجدید: ⦁ $ mongo -u “admin_username” -p “admin_password” –authenticationDatabase “admin” ⦁ این دستور پوسته MongoDB را به عنوان یک کاربر خاص باز می کند، که در آن پرچم -u نام کاربری و پرچم -p رمز عبور آن کاربر را مشخص می کند. پرچم اضافی –authenticationDatabase مشخص می کند که می خواهید به عنوان ادمین وارد شوید. در مرحله بعد ، به یک بانک اطلاعاتی جدید می روید و سپس از روش db.createUser () برای ایجاد یک کاربر جدید دارای مجوز برای ایجاد تغییر در این پایگاه داده استفاده می کنید. بخش هایلایت شده را با اطلاعات مورد نظر خود جایگزین کنید ، حتما این مدارک را یادداشت کنید. دستور زیر را در پوسته MongoDB اجرا کنید: ⦁ mongo> use database_name ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “username”, ⦁ ⦁ mongo> pwd: “password”, ⦁ ⦁ mongo> roles: [“readWrite”] ⦁ ⦁ mongo> })
با این کار خروجی زیر باز می گردد: Output Successfully added user: { “user” : “username”, “roles” : [“readWrite”] }
پس از ایجاد دیتابیس و کاربر ، این بانک اطلاعاتی را با داده های نمونه ای پر کنید که بعداً در این آموزش توسط سرور مجازی GraphQL می توانید جستجو کنید. برای این کار ، می توانید از نمونه مجموعه bios از وب سایت MongoDB استفاده کنید. با اجرای دستورات در قطعه کد زیر ، نسخه کوچکتری از این مجموعه داده bios را در پایگاه داده خود وارد می کنید. می توانید بخش های هایلایت شده را با اطلاعات شخصی خود جایگزین کنید ، اما برای اهداف این آموزش ، نام مجموعه را bios بگذارید: ⦁ mongo> db.bios.insertMany([ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : 1,
⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ ⦁ mongo> “last” : “Backus” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1924-12-03T05:00:00Z”), ⦁ mongo> “death” : ISODate(“2007-03-17T04:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Fortran”, ⦁ ⦁ mongo> “ALGOL”, ⦁ ⦁ mongo> “Backus-Naur Form”, ⦁ ⦁ mongo> “FP” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “W.W. McDowell Award”, ⦁ ⦁ mongo> “year” : 1967, ⦁ ⦁ mongo> “by” : “IEEE Computer Society” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1975, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1977, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Draper Prize”, ⦁ ⦁ mongo> “year” : 1993, ⦁ ⦁ mongo> “by” : “National Academy of Engineering” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : ObjectId(“51df07b094c6acd67e492f41”), ⦁ ⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ mongo> “last” : “McCarthy” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1927-09-04T04:00:00Z”), ⦁ ⦁ mongo> “death” : ISODate(“2011-12-24T05:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Lisp”, ⦁ ⦁ mongo> “Artificial Intelligence”, ⦁ ⦁ mongo> “ALGOL” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1971, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ mongo> “award” : “Kyoto Prize”, ⦁ ⦁ mongo> “year” : 1988, ⦁ ⦁ mongo> “by” : “Inamori Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1990, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ]);
این بلوک کد آرایه ای از آبجکت های مختلفی است که حاوی اطلاعات مربوط به دانشمندان موفق گذشته میباشد. پس از اجرای این دستورات برای وارد کردن این مجموعه به پایگاه داده خود ، پیام زیر را دریافت خواهید کرد که نشان می دهد داده ها اضافه شده اند: Output { “acknowledged” : true, “insertedIds” : [ 1, ObjectId(“51df07b094c6acd67e492f41”) ] }
پس از مشاهده پیام موفقیت ، می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، نصب MongoDB را پیکربندی کنید تا مجوز را فعال کنید و فقط کاربران معتبر بتوانند به داده ها دسترسی پیدا کنند. برای ویرایش پیکربندی نصب MongoDB ، فایل حاوی تنظیمات این نصب را باز کنید: ⦁ $ sudo nano /etc/mongodb.conf ⦁ برای فعال کردن مجوز ، خط هایلایت شده را در کد زیر را باطل کنید: /etc/mongodb.conf … # Turn on/off security. Off is currently the default #noauth = true auth = true …
برای فعال کردن این تغییرات ، MongoDB را مجدداً راه اندازی کنید: ⦁ $ Sudo systemctl restart mongodb ⦁ با اجرای دستور مطمئن شوید که پایگاه داده دوباره در حال اجرا است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را مشاهده خواهید کرد: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
برای اطمینان از اینکه کاربر شما می تواند به دیتابیسی که ایجاد کرده اید وصل شود ، سعی کنید پوسته MongoDB را به عنوان یک کاربر معتبر با دستور زیر باز کنید: ⦁ $ mongo -u “username” -p “password” –authenticationDatabase “database_name” ⦁
از همان پرچم های قبلی استفاده میکند، فقط این بار –authenticationDatabase روی پایگاه داده ای که ایجاد کرده اید تنظیم میشود و با داده های نمونه پر میگردد. اکنون با موفقیت یک کاربر ادمین و کاربر دیگری را اضافه کرده اید که دسترسی به خواندن / نوشتن اطلاعات پایگاه داده با داده های نمونه را دارد. همچنین ، پایگاه داده دارای مجوزهای فعال است به این معنی که یک نام کاربری و رمزعبور برای دسترسی به آن نیاز دارید. در مرحله بعد سرور مجازی GraphQL را ایجاد خواهید کرد که بعداً در آموزش به این پایگاه داده وصل می شود. مرحله دوم – ایجاد سرور مجازی GraphQL با پیکربندی پایگاه داده و پر شدن با داده های نمونه ، زمان آن رسیده که یک سرور مجازی GraphQL ایجاد کنیم که بتواند این داده ها را پرس و جو کند و جهش دهد. برای این کار از Express و express-Graphql استفاده می کنید ، که هر دو در Node اجرا می شوند. Express یک چارچوب سبک برای ایجاد سریع سرور مجازی های HTTP Node.js است و Express-Graphql میان افزار را برای ایجاد سریع سرور مجازی های GraphQL امکان پذیر می کند. اولین قدم اطمینان از به روزرسانی دستگاه شما است: ⦁ $ sudo apt update ⦁ در مرحله بعد با اجرای دستورات زیر Node.js را روی سرور مجازی خود نصب کنید. به همراه Node.js همچنین npm را نصب خواهید کرد ، یک مدیر بسته برای JavaScript که روی Node.js. اجرا می شود. ⦁ $ sudo apt install nodejs npm ⦁ پس از طی مراحل نصب ، بررسی کنید که آیا نسخه Node.js که اخیراً نصب کرده اید v8.10.0 یا بالاتر است: ⦁ $ node -v ⦁ با این کار خروجی زیر باز می گردد: Output v8.10.0
برای شروع یک پروژه جدید JavaScript ، دستورات زیر را به عنوان کاربر sudo روی سرور مجازی اجرا کنید و کلمات کلیدی هایلایت شده را با نامی برای پروژه خود جایگزین کنید. ابتدا وارد دیرکتوری اصلی سرور مجازی خود شوید: ⦁ $ cd ⦁ پس از آنجا دایرکتوری جدیدی به همراه نام پروژه خود ایجاد کنید: ⦁ $ mkdir project_name ⦁ به این دیرکتوری بروید: ⦁ $ cd project_name ⦁ در آخر ، یک بسته npm جدید را با دستور زیر تنظیم کنید: ⦁ $ sudo npm init -y ⦁ بعد از اجرای npm init- پیام موفقیتی را دریافت خواهید کرد که فایل pack.json زیر ایجاد شده است: Output Wrote to /home/username/project_name/package.json:
{ “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” }
توجه: همچنین می توانید npm init را بدون پرچم -y اجرا کنید ، که پس از آن به سؤالات مختلفی برای تنظیم نام پروژه ، نویسنده ، و غیره پاسخ می دهید. می توانید جزئیات را وارد کنید یا فقط برای ادامه کلید Enter را بزنید.
اکنون که پروژه را آغاز کردید ، بسته های لازم برای راه اندازی سرور مجازی GraphQL را نصب کنید: ⦁ $ sudo npm install –save express express-graphql graphql ⦁ یک فایل جدید با نام index.js ایجاد کنید و متعاقباً با اجرای دستور زیر این فایل را باز کنید: ⦁ $ sudo nano index.js ⦁ در مرحله بعد ، بلوک کد زیر را در فایل تازه ایجاد شده برای تنظیم سرور مجازی GraphQL اضافه کنید: index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’);
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `);
// Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
این بلوک کد از چندین بخش تشکیل شده است که همه مهم هستند. ابتدا شمای داده هایی را که توسط GraphQL API برگردانده شده است شرح می دهید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `); … نوع Query تعریف می کند چه پرس و جوهایی میتوانند اجرا شوند و به چه فرمتی می توانند نتیجه را برگردانند. همانطور که مشاهده می کنید ، تنها پرس و جوی تعریف شده hello است که داده ها را با فرمت String برمی گرداند. در بخش بعدی ، resolvers تعیین می شوند ، جایی که داده ها با طرح هایی که می توانید پرس و جو کنند ، هماهنگ می شوند: index.js … // Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ }; …
این resolverها مستقیماً با طرحواره ها مرتبط هستند و داده هایی را که با این طرح ها مطابقت دارد ، برمی گردانند. قسمت پایانی این بلاک کد سرور مجازی GraphQL را آغاز می کند ، نقطه پایانی API را با Express ایجاد می کند و پورتی را که انتهای GraphQL در آن در حال اجرا است توضیح می دهد: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
بعد از افزودن این خطوط ، ذخیره کنید و از index.js خارج شوید. در مرحله بعد ، برای اجرای سرور مجازی GraphQL ، باید فایل index.js را با Node.js. اجرا کنید. این کار به صورت دستی از خط فرمان قابل انجام است ، اما معمول است که فایل pack.json را تنظیم کنید تا این کار برای شما انجام شود. فایل pack.json را باز کنید: ⦁ $ sudo nano package.json ⦁ خط هایلایت شده زیر را به این فایل اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” } فایل را ذخیره کنید و از آن خارج شوید. برای راه اندازی سرور مجازی GraphQL ، دستور زیر را در ترمینال اجرا کنید: ⦁ $ npm start ⦁ پس از اجرای این برنامه ، اعلان ترمینال ناپدید می شود و پیامی برای تأیید سرور مجازی GraphQL ظاهر می شود: Output 🚀 Server ready at http://localhost:4000/graphql
اگر اکنون بخش ترمینال دیگری را باز کرده اید ، می توانید با اجرای دستور زیر آزمایش کنید که آیا سرور مجازی GraphQL در حال اجرا است. این کار درخواست POST curlرا با بدنه JSON پس از پرچم –data که شامل پرس و جوی GraphQL شما به نقطه انتهایی محلی است ارسال می کند: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ hello }” }’ http://localhost:4000/graphql ⦁ با این کار پرس و جو همانطور که در شمای GraphQL در کد شما شرح داده شده است اجرا می شود و داده ها را با فرمت JSON قابل پیش بینی که یکسان با داده های برگشت یافته در resolver هاست، اجرا می کند: Output { “data”: { “hello”: “Hello world!” } }
توجه: در صورت خراب شدن یا گیر نکردن سرور مجازی اکسپرس ، باید فرایند node که روی سرور مجازی اجرا می شود را به صورت دستی از بین ببرید. برای لغو همه این مراحل ، می توانید موارد زیر را اجرا کنید: ⦁ $ killall node ⦁ پس از آن می توانید با دستور زیر، سرور مجازی GraphQL مجدداً راه اندازی کنید: ⦁ $ npm start ⦁ در این مرحله شما اولین نسخه از سرور مجازی GraphQL را ایجاد کرده اید که هم اکنون در یک نقطه پایانی محلی اجرا می شود که به سرور مجازی شما قابل دسترسی است. در مرحله بعد ، resolver های خود را به پایگاه داده MongoDB وصل خواهید کرد. مرحله 3 – اتصال به بانک اطلاعاتی MongoDB با نظم گیری سرور مجازی GraphQL ، اکنون می توانید ارتباط را با پایگاه داده MongoDB که قبلاً پیکربندی کرده و پر از داده کرده اید ، تنظیم نمایید و یک طرح جدید ایجاد کنید که مطابق با این داده ها باشد. برای اینکه بتوانید از سرور مجازی GraphQL به MongoDB متصل شوید ، بسته JavaScript را برای MongoDB از npm نصب کنید: ⦁ $ sudo npm install –save mongodb ⦁ پس از نصب ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ سپس ، کد هایلایت شده زیر را درست بعد از متعلقات وارد شده به index.js اضافه کنید و مقادیر هایلایت شده را با جزئیات اتصال خود به پایگاه داده محلی MongoDB پر کنید. نام کاربری ، رمز عبور و نام پایگاه داده همان مواردی هستند که در مرحله اول این آموزش ایجاد کرده اید. index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }).then(client => client.db(‘database_name’)); …
این خطوط اتصال به پایگاه داده محلی MongoDB را به تابعی به نام context اضافه می کنند. این تابع context در دسترس هر resolver خواهد بود ، به همین دلیل شما از این گزینه برای تنظیم اتصالات بانک اطلاعاتی استفاده می کنید. در مرحله بعد ، در فایل index.js ، با وارد کردن خطوط هایلایت شده زیر ، تابع context را برای مقداردهی اولیه سرور مجازی GraphQL اضافه کنید: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
اکنون می توانید این تابع context را از طریق resolver های خود فراخوانی کنید و از این طریق متغیرهایی را از پایگاه داده MongoDB بخوانید. اگر به مرحله اول این آموزش بازگردید ، می توانید ببینید که کدام مقادیر در پایگاه داده وجود دارد. از اینجا ، یک طرح جدید GraphQL را تعریف کنید که با این ساختار داده مطابقت دارد. مقدار قبلی را برای طرحواره ثابت با خطوط هایلایت شده زیر بازنویسی کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `); …
نوع Query تغییر کرده است و اکنون مجموعه ای از نوع جدید Bio را برمی گرداند. این نوع جدید شامل چندین نوع از جمله دو نوع غیر اسکالر دیگر name و awards است ، به این معنی که این نوع ها با یک قالب از پیش تعریف شده مانند String یا Float مطابقت ندارند. برای اطلاعات بیشتر در مورد تعریف طرح های GraphQL می توانید به مستندات مربوط به GraphQL مراجعه کنید. همچنین ، از آنجا که resolver ها داده را از دیتابیس به شماتیک گره می زنند ، هنگام ایجاد تغییر در طرح ، کد را برای resolver ها به روز کنید. یک resolver جدید ایجاد کنید که به آن bios گفته می شود ، , برابر با Query است که می توانید در طرحواره و نام مجموعه در بانک اطلاعاتی پیدا کنید. توجه داشته باشید که در این حالت ، نام مجموعه در db.collection (“bios”) ، bios است ، اما اگر نام دیگری به مجموعه خود اختصاص داده باشید ، این نام تغییر خواهد کرد. خط هایلایت شده زیر را به index.js اضافه کنید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()) }; …
این تابع از تابع context استفاده می کند ، که می توانید برای بازیابی متغیرها از پایگاه داده MongoDB استفاده کنید. پس از انجام این تغییرات در کد ، index.js را ذخیره کنید و از آن خارج شوید. برای فعال سازی این تغییرات ، باید سرور مجازی GraphQL را مجدداً راه اندازی کنید. با استفاده از ترکیب صفحه کلید CTRL + C می توانید روند فعلی را متوقف کرده و با اجرای دستور زیر، سرور مجازی GraphQL را شروع کنید: ⦁ $ npm start ⦁ اکنون می توانید از طرحواره به روز شده استفاده کرده و داده هایی را که درون پایگاه داده است ، جستجو کنید. اگر به طرحواره نگاه کنید ، خواهید دید که Query برای bios نوع Bio را برمی گرداند. همچنین می تواند type name را برگرداند. برای بازگرداندن تمام اسامی اول و خانوادگی برای همه bioها در پایگاه داده ، درخو��ست زیر را در یک پنجره ترمینال جدید به سرور مجازی GraphQL بفرستید: ⦁ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ دوباره یک آبجکت JSON را که مطابق با ساختار طرح است برمی گرداند: Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}}]}}
به راحتی می توانید با گسترش پرس و جو با هر یک از انواع توصیف شده در نوع Bio ، متغیرهای بیشتری را از بایوس بازیابی کنید. همچنین ، می توانید با مشخص کردن یک id ، bio را بازیابی کنید. برای انجام این کار باید نوع دیگری به Query اضافه کنید و resolver ها را گسترش دهید. به این منظور ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده کد را اضافه کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio }
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })) }; …
فایل را ذخیره کنید و از آن خارج شوید. در ترمینالی که سرور مجازی GraphQL شما در حال اجراست ، CTRL + C را فشار دهید تا آن را از حالت اجرا متوقف کنید، سپس دستور زیر را برای راه اندازی مجدد آن اجرا کنید: ⦁ $ npm start ⦁ در پنجره ترمینال دیگر ، درخواست GraphQL زیر را اجرا کنید:
⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bio(id: 1) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁
ورودی برای bio که دارای شناسه برابر با 1 است را برمی گرداند: Output { “data”: { “bio”: { “name”: { “first”: “John”, “last”: “Backus” } } } }
توانایی جستجوی داده ها از یک پایگاه داده تنها ویژگی GraphQL نیست. همچنین می توانید داده ها را در دیتابیس تغییر دهید. برای انجام این کار ، index.js را باز کنید: ⦁ $ sudo nano index.js ⦁ در کنار نوع Query می توانید از نوع Mutation نیز استفاده کنید که به شما امکان می دهد پایگاه داده را جهش دهید. برای استفاده از این نوع ، آن را به طرح اضافه کنید و همچنین با وارد کردن این خطوط هایلایت شده ، انواع ورودی را ایجاد کنید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } …
این نوع ورودی ها تعریف می کنند که کدام متغیرها می توانند به عنوان ورودی استفاده شوند ، که می توانید به آنها در resolver ها دسترسی داشته باشید و از آنها برای درج یک سند جدید در بانک اطلاعاتی استفاده کنید. این کار را با اضافه کردن سطرهای زیر به index.js انجام دهید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘bios’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) }; …
درست همانطور که در مورد resolver ها برای جستارهای معمول گفته شد ، شما باید یک مقدار از resolver در index.js را برگردانید. در مورد جهش که نوع Bio در آن جهش یافته است ، مقدار bio جهش یافته را برمی گردانید. در این مرحله ، فایل index.js شما شامل سطرهای زیر خواهد بود: index.js iconst express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }) .then(client => client.db(‘GraphQL_Test’));
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `);
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) =>context().then(db => db.collection(‘Sample_Data’).find().toArray()), bio: (args, context) =>context().then(db => db.collection(‘Sample_Data’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘Sample_Data’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
ذخیره کنید و از index.js خارج شوید. برای بررسی اینکه جهش جدید شما در حال کار است ، با فشار دادن CTRL + c و اجرای npm در ترمینالی که سرور مجازی GraphQL شما را اجرا می کند ، سرور مجازی GraphQL را مجدداً راه اندازی کنید ، سپس یک بخش ترمینال دیگر را برای اجرای درخواست curl زیر باز کنید. درست مانند درخواست curl برای پرس و جو ، بدنه در پرچم –data به سرور مجازی GraphQL ارسال می شود. قسمت های هایلایت شده به دیتابیس اضافه می شود: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “mutation { addBio(input: { name: { first: \”test\”, last: \”user\” } }) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ نتیجه زیر را به همراه دارد ، بدین معنی که شما یک bio جدید را به بانک اطلاعاتی وارد کرده اید: Output { “data”: { “addBio”: { “name”: { “first”: “test”, “last”: “user” } } } }
در این مرحله ارتباط خود را با MongoDB و سرور مجازی GraphQL ایجاد کردید و با اجرای پرس و جوهای GraphQL می توانید داده ها را از این پایگاه داده بازیابی کنید و جهش دهید. در مرحله بعد ، این سرور مجازی GraphQL را برای دسترسی از راه دور قرار می دهید. مرحله 4 – اجازه دسترسی از راه دور با راه اندازی بانک اطلاعاتی و سرور مجازی GraphQL ، اکنون می توانید سرور مجازی GraphQL را پیکربندی کنید تا امکان دسترسی از راه دور فراهم شود. برای این کار از Nginx استفاده می کنید ، که در آموزش پیش نیاز نحوه نصب Nginx در اوبونتو 18.04 این کار را انجام دادید. این پیکربندی Nginx را می توان در فایل /etc/nginx/sites-available/example.com یافت ، جایی که example.com نام سرور مجازی ی است که در آموزش پیش نیاز اضافه کردید. این فایل را برای ویرایش باز کنید و نام دامنه خود را در example.com جایگزین کنید: ⦁ $ sudo nano /etc/nginx/sites-available/example.com ⦁ در این فایل می توانید یک بلوک سرور مجازی پیدا کنید که به پورت 80 گوش می دهد ، جایی که در حال حاضر مقداری برای server_name در آموزش پیش نیاز تنظیم کرده اید. در داخل این بلوک سرور مجازی ، مقدار root را تغییر دهید تا دایرکتوری باشد که در آن کد را برای سرور مجازی GraphQL ایجاد کرده و index.js را به عنوان فهرست اضافه می کنید. همچنین ، در بلوک لوکیشن ، یک proxy_pass تنظیم کنید تا بتوانید از IP سرور مجازی یا نام دامنه دلخواه خود برای مراجعه به سرور مجازی GraphQL استفاده کنید: /etc/nginx/sites-available/example.com server { listen 80; listen [::]:80;
root /project_name; index index.js;
server_name example.com;
location / { proxy_pass http://localhost:4000/graphql; } }
با اجرای دستور زیر مطمئن شوید که هیچ خطای نحوی Nginx در این فایل پیکربندی وجود ندارد: ⦁ $ sudo nginx -t ⦁ خروجی زیر را دریافت خواهید کرد: Output nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
هنگامی که هیچ خطایی برای فایل پیکربندی یافت نشد ، Nginx را مجدداً راه اندازی کنید: ⦁ $ sudo systemctl restart nginx ⦁ اکنون می توانید با اجرا و جایگزین کردن example.com توسط IP سرور مجازی یا نام دامنه شخصی خود به سرور مجازی GraphQL خود از هر تب بخش ترمینال دسترسی داشته باشید: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://example.com ⦁ همان آبجکت JSON به شیوه مرحله قبلی را برمی گرداند که شامل هر داده اضافی است که ممکن است با استفاده از یک جهش ، اضافه کرده باشید. Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}},{“name”:{“first”:”test”,”last”:”user”}}]}}
اکنون که سرور مجازی GraphQL را از راه دور در دسترس قرار داده اید ، هنگام بستن ترمینال یا راه اندازی مجدد سرور مجازی ، مطمئن شوید که سرور مجازی GraphQL شما متوقف نمیشود. به این ترتیب ، هر زمان که بخواهید درخواست کنید ، پایگاه داده MongoDB شما از طریق سرور مجازی GraphQL قابل دسترسی خواهد بود. برای انجام این کار ، از بسته npm forever استفاده کنید ، یک ابزار CLI که تضمین می کند اسکریپت های خط فرمان شما به طور مداوم اجرا میشوند یا در صورت بروز هرگونه خرابی مجدداً راه اندازی می شوند. Forever را با npm نصب کنید: ⦁ $ sudo npm install forever -g ⦁ پس از انجام کار نصب ، آن را به فایل pack.json اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “deploy”: “forever start –minUptime 2000 –spinSleepTime 5 index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, …
برای راه اندازی سرور مجازی GraphQL با forever فعال ، دستور زیر را اجرا کنید: ⦁ $ npm run deploy ⦁ با این کار فایل index.js حاوی سرور مجازی GraphQL با forever شروع می شود و اطمینان حاصل می کند که در صورت عدم موفقیت ، با حداقل زمان اجرای 2000 میلی ثانیه و 5 میلی ثانیه در هر راه اندازی مجدد کار خود را ادامه می دهید. سرور مجازی GraphQL اکنون به طور مداوم در پس زمینه اجرا می شود ، بنابراین دیگر وقتی می خواهید یک درخواست به سرور مجازی ارسال کنید ، دیگر نیازی به باز کردن تب جدید ندارید. اکنون یک سرور مجازی GraphQL ایجاد کرده اید که از MongoDB برای ذخیره داده استفاده می کند و برای دسترسی به سرور مجازی از راه دور تنظیم شده است. در مرحله بعدی می توانید playground را درGraphiQL را فعال کنید ، که این امکان را برای شما فراهم می کند که سرور مجازی GraphQL را بازرسی کنید. مرحله 5 – فعال کردن playground GraphiQL توانایی ارس��ل درخواستهای cURL به سرور مجازی GraphQL بسیار عالی است ، اما با داشتن یک رابط کاربری که بتواند بلافاصله درخواستهای GraphQL را اجرا کند ، به خصوص هنگام توسعه ، سریعتر خواهد بود. برای این کار می توانید از GraphiQL ، واسط پشتیبانی شده توسط بسته express-Graphql استفاده کنید. برای فعال کردن GraphiQL ، فایل index.js را ویرایش کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده زیر را اضافه کنید: index.js const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context, graphiql: true })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
فایل را ذخیره کنید و از آن خارج شوید. برای اینکه این تغییرات قابل مشاهده باشند ، با اجرای دستور زیر forever را متوقف شوید: ⦁ $ forever stop index.js ⦁ سپس ، دوباره forever را شروع کنید تا آخرین نسخه سرور مجازی QL در حال اجرا را ببینید ⦁ $ npm run deploy ⦁
یک مرورگر به آدرس http://example.com باز کنید ، و جایگزین example.com را با نام دامنه یا IP سرور مجازی خود جایگزین کنید. playground GraphiQL را خواهید دید که در آن می توانید درخواست های GraphQL را تایپ کنید.
در سمت چپ این playground می توانید پرس و جوهای GraphQL و جهش ها را تایپ کنید ، در حالی که خروجی در سمت راست playground نشان داده خواهد شد. برای آزمایش اینکه آیا کار می کند ، عبارت زیر را در سمت چپ تایپ کنید: query { bios { name { first last } } }
نتیجه مشابه در سمت راست playground ، دوباره با فرمت JSON را نشان میدهد:
اکنون می توانید درخواست های GraphQL را با استفاده از ترمینال و playground GraphiQL ارسال کنید. نتیجه در این آموزش پایگاه داده MongoDB را تنظیم کرده و داده ها را از این پایگاه داده با استفاده از GraphQL ، Node.js و Express برای سرور مجازی بازیابی می کنید و جهش میدهید. علاوه بر این ، Nginx را پیکربندی کردید تا امکان دسترسی از راه دور به این سرور مجازی را فراهم کند. نه تنها می توانید درخواست ها را به طور مستقیم به این سرور مجازی GraphQL ارسال کنید ، بلکه می توانید از GraphiQL به عنوان یک رابط GraphQL در مرورگر GraphQL نیز استفاده کنید. اگر می خواهید در مورد GraphQL اطلاعات کسب کنید ، می توانید فیلم ضبط شده از ارائه من در GraphQL را در NDC {London watch} مشاهده کنید یا برای آموزش در مورد GraphQL به وب سایت howtographql.com مراجعه کنید. برای مطالعه چگونگی تعامل GraphQL با سایر فناوری ها ، به آموزش نحوه تنطیم دستی سرور مجازی Prisma در اوبونتو 18.04 نگاهی بیاندازید، و برای کسب اطلاعات بیشتر در مورد ساخت برنامه های کاربردی با MongoDB ، به نحوه ایجاد بلاگ با Nest.js ، MongoDB و Vue.js مراجعه کنید.
از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :
پارامترهای پیش فرض در جاوا اسکریپت  –  اجرای چندین نسخه PHP بر روی یک سرور Debian 10
نحوه راه اندازی یک پروژه React با برنامه React – نصب و ایمن سازی phpMyAdmin در اوبونتو 18
پیکربندی یک تایید اعتبار مجاز(CA) در CentOS 8  –  تنظیم برنامه Node.js برای تولید در CentOS 7
نصب MariaDB در اوبونتو 18.04  – ایمن کردن Apache با Let’s Encrypt در Debian 10
نحوه نصب Node.js در CentOS 8  –  بازنویسی URL را با mod_rewrite برای Apache در Debian 10
راه اندازی فایروال با استفاده از firewalld در CentOS 8  –  نصب وب سرور Apache در Debian 10
اضافه کردن و حذف کاربران در CentOS 8 –  نصب Apache Tomcat 9 در Debian 10
نصب و استفاده از PostgreSQL در CentOS 8  –  راه اندازی سرور اولیه با Debian 10
نصب MariaDB در CentOS 8  –  چگونه با JSX عناصر واقعی ایجاد کنیم
نصب و پیکربندی VNC در Debian 10  –  استفاده از سرور از راه دور Docker
نصب و ایمن سازی Grafana در اوبونتو 18  –  نحوه نصب Git در CentOS 8
نصب Git در Debian 10 –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرورهای
نحوه نصب Node.js در Debian 10  –  نصب وب سرور Apache در CentOS 7
نحوه نصب Webmin در Debian 10  –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرور
نصب وردپرس با بانک اطلاعاتی در اوبونتو  – ساخت و استقرار سرور GraphQL با Node.js و MongoDB
نصب پایتون 3 و تنظیم نویسی محلی macOS  – نصب و ایمن سازی phpMyAdmin با Nginx در سرور
نصب Nagios 4 و نظارت بر سرور اوبونتو 18  –  نصب Python 3 و تنظیم یک محیط برنامه نویسی
نحوه نصب R بر روی Debian 10  –  راه اندازی سرور Prisma روی اوبونتو 18.04
نصب و پیکربندی Laravel با LEMP در اوبونتو 18  –  نصب و پیکربندی pgAdmin 4 در Server Mode
نصب Python 3 و تنظیم برنامه نویسی CentOS 8 – نصب Jitsi Meet در Ubuntu 18.04
کلمات کلیدی خرید سرور
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور م��ازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
برچسب‌ها:
GraphQL
,
MongoDB
,
Node.js
0 notes
vpsgold-blog · 4 years
Text
ساخت و استقرار سرور GraphQL با Node.js و MongoDB
GraphQL در سال 2015 توسط فیس بوک به عنوان یک زبان پرس و جو برای API ها منتشر شد که پرس و جو و جهش داده ها از مجموعه داده های مختلف را آسان می کند. از یک نقطه پایانی واحد ، می توانید چندین منبع داده را با یک درخواست POST منفرد جستجو کنید و به جش واردارید. GraphQL برخی از نقص طراحی معمول در معماری REST API را برطرف می کند ، مانند موقعیت هایی که نقطه انتهایی اطلاعات بیشتری را نسبت به آنچه در واقع لازم دارید برمی گرداند. همچنین ، هنگام استفاده از API های REST ممکن است برای جمع آوری تمام اطلاعات مورد نیاز خود، ممکن است نیاز به ارسال درخواست به چند مورد از نقاط انتهایی REST داشته باشید – وضعیتی که به آن مشکل n + 1 گفته می شود. نمونه ای از این موارد وقتی پیش می آید که می خواهید اطلاعات کاربر را نشان دهید ، اما باید اطلاعاتی از قبیل جزئیات شخصی و آدرس ها را از نقاط مختلف جمع آوری کنید. این مشکلات برای GraphQL اعمال نمی شوند زیرا تنها یک نقطه پایانی دارد که می تواند داده ها را از چندین مجموعه بازگرداند. داده بازگشتی به پرس و جویی که به این نقطه پایانی ارسال شده بستگی دارد. در این پرس و جو ساختار داده ای را که می خواهید دریافت کنید ، از جمله هر مجموعه داده تو در تو را تعریف می کنید. علاوه بر یک پرس و جو ، می توانید از یک جهش برای تغییر داده ها روی یک سرور مجازی GraphQL و یک اشتراک نیز برای مشاهده تغییرات در داده استفاده کنید. برای کسب اطلاعات بیشتر در مورد GraphQL و مفاهیم آن ، می توانید به مطالب موجود در وب سایت رسمی مراجعه کنید. از آنجا که GraphQL یک زبان پرس و جو با انعطاف پذیری زیاد است ، به خصوص با داده های مبتنی بر مستندات مانند MongoDB ترکیب می شود. هر دو فناوری مبتنی بر طرحواره های سلسله مراتبی ، تایپ شده هستند و در جامعه جاوا اسکریپت محبوب میباشند. همچنین ، داده های MongoDB به عنوان اشیاء JSON ذخیره می شوند ، بنابراین هیچ تجزیه و تحلیل اضافی در سرور مجازی GraphQL لازم نیست. در این آموزش ، یک سرور مجازی GraphQL با Node.js ایجاد خواهید کرد و می توانید داده ها را از یک پایگاه داده MongoDB که در اوبونتو 18.04 در حال اجرا است ، پرس و جو کنید و جهش دهید. در پایان این آموزش ، شما می توانید با استفاده از یک نقطه پایانی واحد، هم با ارسال درخواست به سرور مجازی به طور مستقیم از طریق ترمینال و هم با استفاده از رابط پیش ساخته playground در GraphiQL به داده های موجود در بانک اطلاعاتی خود دسترسی داشته باشید. با استفاده از این playground می توانید محتویات سرور مجازی GraphQL را با ارسال پرس و جوها ، جهش ها و اشتراک ها کشف کنید. همچنین ، می توانید نمایش های بصری از طرح هایی را که برای این سرور مجازی تعریف شده است ، پیدا کنید. در پایان این آموزش ، شما از playground GraphiQL برای ارتباط سریع سرور مجازی GraphQL خود استفاده خواهید کرد:
پیش نیازها قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت: ⦁ سرور مجازی Ubuntu 18.04 که با پیروی از راهنمای تنظیم اولیه سرور مجازی Ubuntu 18.04 تنظیم شده باشد، شامل یک کاربر sudo غیر ریشه و فایروال نیز باشد. ⦁ نصب MongoDB و اجرای آن در اوبونتو 18.04 که می توانید با دنبال کردن آموزش نحوه نصب MongoDB در اوبونتو 18.04 آن را تنظیم کنید. ⦁ Nginx نصب شده ، همانطور که در نحوه نصب Nginx در Ubuntu 18.04 مشاهده می شود ، از جمله مرحله 4 – تنظیم بلوک های سرور مجازی. ⦁ برای دسترسی از راه دور به سرور مجازی GraphQL ، به یک نام دامنه کاملاً واجد شرایط (FQDN) و یک رکورد A نیاز دارید که به IP سرور مجازی شما اشاره کند. در صورت داشتن حساب vpsgol ، می توانید اطلاعات بیشتری در مورد این مورد با خواندن طریق مقدمه DNS اصطلاحات ، مؤلفه ها و مفاهیم ، یا اسناد دامنه و DNS کسب کنید. ⦁ آشنایی با JavaScript ، که می توانید از مجموعه نحوه کدنویسی در جاواسکریپت بیاموزید. مرحله 1 – تنظیم بانک اطلاعاتی MongoDB قبل از ایجاد سرور مجازی GraphQL ، اطمینان حاصل کنید که پایگاه داده شما درست پیکربندی شده باشد ، تأیید هویت آن فعال باشد و با داده های نمونه پر شده باشد. برای این کار باید از اعلان خط فرمان به سرور مجازی Ubuntu 18.04 که پایگاه داده MongoDB است متصل شوید. کلیه مراحل این آموزش در این سرور مجازی انجام خواهد شد. بعد از برقراری اتصال ، دستور زیر را اجرا کنید تا بررسی کنید که آیا MongoDB فعال و روی سرور مجازی شما فعال است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را در ترمینال خود مشاهده خواهید کرد ، نشان می دهد که بانک اطلاعاتی MongoDB به طور فعال در حال اجرا است: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
قبل از ایجاد دیتابیس که داده های نمونه را در آن ذخیره می کنید ، ابتدا باید یک کاربر ادمین ایجاد کنید ، زیرا کاربران عادی در یک پایگاه داده خاص قرار می گیرند. می توانید با اجرای دستور زیر که پوسته MongoDB را باز می کند ، این کار را انجام دهید: ⦁ $ mongo ⦁ با پوسته MongoDB دسترسی مستقیم به پایگاه داده MongoDB خواهید داشت و می توانید کاربران یا بانکهای اطلاعاتی و داده های پرس و جو ایجاد کنید. در داخل این پوسته ، دستور زیر را اجرا کنید که یک کاربر ادمین جدید را به MongoDB اضافه می کند. می توانید کلمات کلیدی هایلایت شده را با نام کاربری و رمز ورود خود جایگزین کنید ، اما فراموش نکنید که آنها را در جایی بنویسید. ⦁ mongo> use admin ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “admin_username”, ⦁ mongo> pwd: “admin_password”, ⦁ ⦁ mongo> roles: [{ role: “root”, db: “admin”}] ⦁ ⦁ mongo> })
خط اول دستور قبلی دیتابیس را با نام ادمین انتخاب می کند ، یعنی همان دیتابیسی که تمام نقش های ادمین در آن ذخیره می شود. با روش db.createUser () می توانید کاربر واقعی ایجاد کرده و نام کاربری ، رمزعبور و نقش های آن را تعریف کنید. اجرای این فرمان خروجی زیر را برمی گرداند: Output Successfully added user: { “user” : “admin_username”, “roles” : [ { “role” : “root”, ��db” : “admin” } ] }
اکنون می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، دوباره وارد پوسته MongoDB شوید ، اما این بار با کاربر adminجدید: ⦁ $ mongo -u “admin_username” -p “admin_password” –authenticationDatabase “admin” ⦁ این دستور پوسته MongoDB را به عنوان یک کاربر خاص باز می کند، که در آن پرچم -u نام کاربری و پرچم -p رمز عبور آن کاربر را مشخص می کند. پرچم اضافی –authenticationDatabase مشخص می کند که می خواهید به عنوان ادمین وارد شوید. در مرحله بعد ، به یک بانک اطلاعاتی جدید می روید و سپس از روش db.createUser () برای ایجاد یک کاربر جدید دارای مجوز برای ایجاد تغییر در این پایگاه داده استفاده می کنید. بخش هایلایت شده را با اطلاعات مورد نظر خود جایگزین کنید ، حتما این مدارک را یادداشت کنید. دستور زیر را در پوسته MongoDB اجرا کنید: ⦁ mongo> use database_name ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “username”, ⦁ ⦁ mongo> pwd: “password”, ⦁ ⦁ mongo> roles: [“readWrite”] ⦁ ⦁ mongo> })
با این کار خروجی زیر باز می گردد: Output Successfully added user: { “user” : “username”, “roles” : [“readWrite”] }
پس از ایجاد دیتابیس و کاربر ، این بانک اطلاعاتی را با داده های نمونه ای پر کنید که بعداً در این آموزش توسط سرور مجازی GraphQL می توانید جستجو کنید. برای این کار ، می توانید از نمونه مجموعه bios از وب سایت MongoDB استفاده کنید. با اجرای دستورات در قطعه کد زیر ، نسخه کوچکتری از این مجموعه داده bios را در پایگاه داده خود وارد می کنید. می توانید بخش های هایلایت شده را با اطلاعات شخصی خود جایگزین کنید ، اما برای اهداف این آموزش ، نام مجموعه را bios بگذارید: ⦁ mongo> db.bios.insertMany([ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : 1,
⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ ⦁ mongo> “last” : “Backus” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1924-12-03T05:00:00Z”), ⦁ mongo> “death” : ISODate(“2007-03-17T04:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Fortran”, ⦁ ⦁ mongo> “ALGOL”, ⦁ ⦁ mongo> “Backus-Naur Form”, ⦁ ⦁ mongo> “FP” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “W.W. McDowell Award”, ⦁ ⦁ mongo> “year” : 1967, ⦁ ⦁ mongo> “by” : “IEEE Computer Society” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1975, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1977, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Draper Prize”, ⦁ ⦁ mongo> “year” : 1993, ⦁ ⦁ mongo> “by” : “National Academy of Engineering” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : ObjectId(“51df07b094c6acd67e492f41”), ⦁ ⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ mongo> “last” : “McCarthy” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1927-09-04T04:00:00Z”), ⦁ ⦁ mongo> “death” : ISODate(“2011-12-24T05:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Lisp”, ⦁ ⦁ mongo> “Artificial Intelligence”, ⦁ ⦁ mongo> “ALGOL” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1971, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ mongo> “award” : “Kyoto Prize”, ⦁ ⦁ mongo> “year” : 1988, ⦁ ⦁ mongo> “by” : “Inamori Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1990, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ]);
این بلوک کد آرایه ای از آبجکت های مختلفی است که حاوی اطلاعات مربوط به دانشمندان موفق گذشته میباشد. پس از اجرای این دستورات برای وارد کردن این مجموعه به پایگاه داده خود ، پیام زیر را دریافت خواهید کرد که نشان می دهد داده ها اضافه شده اند: Output { “acknowledged” : true, “insertedIds” : [ 1, ObjectId(“51df07b094c6acd67e492f41”) ] }
پس از مشاهده پیام موفقیت ، می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، نصب MongoDB را پیکربندی کنید تا مجوز را فعال کنید و فقط کاربران معتبر بتوانند به داده ها دسترسی پیدا کنند. برای ویرایش پیکربندی نصب MongoDB ، فایل حاوی تنظیمات این نصب را باز کنید: ⦁ $ sudo nano /etc/mongodb.conf ⦁ برای فعال کردن مجوز ، خط هایلایت شده را در کد زیر را باطل کنید: /etc/mongodb.conf … # Turn on/off security. Off is currently the default #noauth = true auth = true …
برای فعال کردن این تغییرات ، MongoDB را مجدداً راه اندازی کنید: ⦁ $ Sudo systemctl restart mongodb ⦁ با اجرای دستور مطمئن شوید که پایگاه داده دوباره در حال اجرا است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را مشاهده خواهید کرد: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
برای اطمینان از اینکه کاربر شما می تواند به دیتابیسی که ایجاد کرده اید وصل شود ، سعی کنید پوسته MongoDB را به عنوان یک کاربر معتبر با دستور زیر باز کنید: ⦁ $ mongo -u “username” -p “password” –authenticationDatabase “database_name” ⦁
از همان پرچم های قبلی استفاده میکند، فقط این بار –authenticationDatabase روی پایگاه داده ای که ایجاد کرده اید تنظیم میشود و با داده های نمونه پر میگردد. اکنون با موفقیت یک کاربر ادمین و کاربر دیگری را اضافه کرده اید که دسترسی به خواندن / نوشتن اطلاعات پایگاه داده با داده های نمونه را دارد. همچنین ، پایگاه داده دارای مجوزهای فعال است به این معنی که یک نام کاربری و رمزعبور برای دسترسی به آن نیاز دارید. در مرحله بعد سرور مجازی GraphQL را ایجاد خواهید کرد که بعداً در آموزش به این پایگاه داده وصل می شود. مرحله دوم – ایجاد سرور مجازی GraphQL با پیکربندی پایگاه داده و پر شدن با داده های نمونه ، زمان آن رسیده که یک سرور مجازی GraphQL ایجاد کنیم که بتواند این داده ها را پرس و جو کند و جهش دهد. برای این کار از Express و express-Graphql استفاده می کنید ، که هر دو در Node اجرا می شوند. Express یک چارچوب سبک برای ایجاد سریع سرور مجازی های HTTP Node.js است و Express-Graphql میان افزار را برای ایجاد سریع سرور مجازی های GraphQL امکان پذیر می کند. اولین قدم اطمینان از به روزرسانی دستگاه شما است: ⦁ $ sudo apt update ⦁ در مرحله بعد با اجرای دستورات زیر Node.js را روی سرور مجازی خود نصب کنید. به همراه Node.js همچنین npm را نصب خواهید کرد ، یک مدیر بسته برای JavaScript که روی Node.js. اجرا می شود. ⦁ $ sudo apt install nodejs npm ⦁ پس از طی مراحل نصب ، بررسی کنید که آیا نسخه Node.js که اخیراً نصب کرده اید v8.10.0 یا بالاتر است: ⦁ $ node -v ⦁ با این کار خروجی زیر باز می گردد: Output v8.10.0
برای شروع یک پروژه جدید JavaScript ، دستورات زیر را به عنوان کاربر sudo روی سرور مجازی اجرا کنید و کلمات کلیدی هایلایت شده را با نامی برای پروژه خود جایگزین کنید. ابتدا وارد دیرکتوری اصلی سرور مجازی خود شوید: ⦁ $ cd ⦁ پس از آنجا دایرکتوری جدیدی به همراه نام پروژه خود ایجاد کنید: ⦁ $ mkdir project_name ⦁ به این دیرکتوری بروید: ⦁ $ cd project_name ⦁ در آخر ، یک بسته npm جدید را با دستور زیر تنظیم کنید: ⦁ $ sudo npm init -y ⦁ بعد از اجرای npm init- پیام موفقیتی را دریافت خواهید کرد که فایل pack.json زیر ایجاد شده است: Output Wrote to /home/username/project_name/package.json:
{ “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” }
توجه: همچنین می توانید npm init را بدون پرچم -y اجرا کنید ، که پس از آن به سؤالات مختلفی برای تنظیم نام پروژه ، نویسنده ، و غیره پاسخ می دهید. می توانید جزئیات را وارد کنید یا فقط برای ادامه کلید Enter را بزنید.
اکنون که پروژه را آغاز کردید ، بسته های لازم برای راه اندازی سرور مجازی GraphQL را نصب کنید: ⦁ $ sudo npm install –save express express-graphql graphql ⦁ یک فایل جدید با نام index.js ایجاد کنید و متعاقباً با اجرای دستور زیر این فایل را باز کنید: ⦁ $ sudo nano index.js ⦁ در مرحله بعد ، بلوک کد زیر را در فایل تازه ایجاد شده برای تنظیم سرور مجازی GraphQL اضافه کنید: index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’);
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `);
// Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
این بلوک کد از چندین بخش تشکیل شده است که همه مهم هستند. ابتدا شمای داده هایی را که توسط GraphQL API برگردانده شده است شرح می دهید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `); … نوع Query تعریف می کند چه پرس و جوهایی میتوانند اجرا شوند و به چه فرمتی می توانند نتیجه را برگردانند. همانطور که مشاهده می کنید ، تنها پرس و جوی تعریف شده hello است که داده ها را با فرمت String برمی گرداند. در بخش بعدی ، resolvers تعیین می شوند ، جایی که داده ها با طرح هایی که می توانید پرس و جو کنند ، هماهنگ می شوند: index.js … // Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ }; …
این resolverها مستقیماً با طرحواره ها مرتبط هستند و داده هایی را که با این طرح ها مطابقت دارد ، برمی گردانند. قسمت پایانی این بلاک کد سرور مجازی GraphQL را آغاز می کند ، نقطه پایانی API را با Express ایجاد می کند و پورتی را که انتهای GraphQL در آن در حال اجرا است توضیح می دهد: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
بعد از افزودن این خطوط ، ذخیره کنید و از index.js خارج شوید. در مرحله بعد ، برای اجرای سرور مجازی GraphQL ، باید فایل index.js را با Node.js. اجرا کنید. این کار به صورت دستی از خط فرمان قابل انجام است ، اما معمول است که فایل pack.json را تنظیم کنید تا این کار برای شما انجام شود. فایل pack.json را باز کنید: ⦁ $ sudo nano package.json ⦁ خط هایلایت شده زیر را به این فایل اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC��� } فایل را ذخیره کنید و از آن خارج شوید. برای راه اندازی سرور مجازی GraphQL ، دستور زیر را در ترمینال اجرا کنید: ⦁ $ npm start ⦁ پس از اجرای این برنامه ، اعلان ترمینال ناپدید می شود و پیامی برای تأیید سرور مجازی GraphQL ظاهر می شود: Output 🚀 Server ready at http://localhost:4000/graphql
اگر اکنون بخش ترمینال دیگری را باز کرده اید ، می توانید با اجرای دستور زیر آزمایش کنید که آیا سرور مجازی GraphQL در حال اجرا است. این کار درخواست POST curlرا با بدنه JSON پس از پرچم –data که شامل پرس و جوی GraphQL شما به نقطه انتهایی محلی است ارسال می کند: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ hello }” }’ http://localhost:4000/graphql ⦁ با این کار پرس و جو همانطور که در شمای GraphQL در کد شما شرح داده شده است اجرا می شود و داده ها را با فرمت JSON قابل پیش بینی که یکسان با داده های برگشت یافته در resolver هاست، اجرا می کند: Output { “data”: { “hello”: “Hello world!” } }
توجه: در صورت خراب شدن یا گیر نکردن سرور مجازی اکسپرس ، باید فرایند node که روی سرور مجازی اجرا می شود را به صورت دستی از بین ببرید. برای لغو همه این مراحل ، می توانید موارد زیر را اجرا کنید: ⦁ $ killall node ⦁ پس از آن می توانید با دستور زیر، سرور مجازی GraphQL مجدداً راه اندازی کنید: ⦁ $ npm start ⦁ در این مرحله شما اولین نسخه از سرور مجازی GraphQL را ایجاد کرده اید که هم اکنون در یک نقطه پایانی محلی اجرا می شود که به سرور مجازی شما قابل دسترسی است. در مرحله بعد ، resolver های خود را به پایگاه داده MongoDB وصل خواهید کرد. مرحله 3 – اتصال به بانک اطلاعاتی MongoDB با نظم گیری سرور مجازی GraphQL ، اکنون می توانید ارتباط را با پایگاه داده MongoDB که قبلاً پیکربندی کرده و پر از داده کرده اید ، تنظیم نمایید و یک طرح جدید ایجاد کنید که مطابق با این داده ها باشد. برای اینکه بتوانید از سرور مجازی GraphQL به MongoDB متصل شوید ، بسته JavaScript را برای MongoDB از npm نصب کنید: ⦁ $ sudo npm install –save mongodb ⦁ پس از نصب ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ سپس ، کد هایلایت شده زیر را درست بعد از متعلقات وارد شده به index.js اضافه کنید و مقادیر هایلایت شده را با جزئیات اتصال خود به پایگاه داده محلی MongoDB پر کنید. نام کاربری ، رمز عبور و نام پایگاه داده همان مواردی هستند که در مرحله اول این آموزش ایجاد کرده اید. index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }).then(client => client.db(‘database_name’)); …
این خطوط اتصال به پایگاه داده محلی MongoDB را به تابعی به نام context اضافه می کنند. این تابع context در دسترس هر resolver خواهد بود ، به همین دلیل شما از این گزینه برای تنظیم اتصالات بانک اطلاعاتی استفاده می کنید. در مرحله بعد ، در فایل index.js ، با وارد کردن خطوط هایلایت شده زیر ، تابع context را برای مقداردهی اولیه سرور مجازی GraphQL اضافه کنید: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
اکنون می توانید این تابع context را از طریق resolver های خود فراخوانی کنید و از این طریق متغیرهایی را از پایگاه داده MongoDB بخوانید. اگر به مرحله اول این آموزش بازگردید ، می توانید ببینید که کدام مقادیر در پایگاه داده وجود دارد. از اینجا ، یک طرح جدید GraphQL را تعریف کنید که با این ساختار داده مطابقت دارد. مقدار قبلی را برای طرحواره ثابت با خطوط هایلایت شده زیر بازنویسی کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `); …
نوع Query تغییر کرده است و اکنون مجموعه ای از نوع جدید Bio را برمی گرداند. این نوع جدید شامل چندین نوع از جمله دو نوع غیر اسکالر دیگر name و awards است ، به این معنی که این نوع ها با یک قالب از پیش تعریف شده مانند String یا Float مطابقت ندارند. برای اطلاعات بیشتر در مورد تعریف طرح های GraphQL می توانید به مستندات مربوط به GraphQL مراجعه کنید. همچنین ، از آنجا که resolver ها داده را از دیتابیس به شماتیک گره می زنند ، هنگام ایجاد تغییر در طرح ، کد را برای resolver ها به روز کنید. یک resolver جدید ایجاد کنید که به آن bios گفته می شود ، , برابر با Query است که می توانید در طرحواره و نام مجموعه در بانک اطلاعاتی پیدا کنید. توجه داشته باشید که در این حالت ، نام مجموعه در db.collection (“bios”) ، bios است ، اما اگر نام دیگری به مجموعه خود اختصاص داده باشید ، این نام تغییر خواهد کرد. خط هایلایت شده زیر را به index.js اضافه کنید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()) }; …
این تابع از تابع context استفاده می کند ، که می توانید برای بازیابی متغیرها از پایگاه داده MongoDB استفاده کنید. پس از انجام این تغییرات در کد ، index.js را ذخیره کنید و از آن خارج شوید. برای فعال سازی این تغییرات ، باید سرور مجازی GraphQL را مجدداً راه اندازی کنید. با استفاده از ترکیب صفحه کلید CTRL + C می توانید روند فعلی را متوقف کرده و با اجرای دستور زیر، سرور مجازی GraphQL را شروع کنید: ⦁ $ npm start ⦁ اکنون می توانید از طرحواره به روز شده استفاده کرده و داده هایی را که درون پایگاه داده است ، جستجو کنید. اگر به طرحواره نگاه کنید ، خواهید دید که Query برای bios نوع Bio را برمی گرداند. همچنین می تواند type name را برگرداند. برای بازگرداندن تمام اسامی اول و خانوادگی برای همه bioها در پایگاه داده ، درخواست زیر را در یک پنجره ترمینال جدید به سرور مجازی GraphQL بفرستید: ⦁ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ دوباره یک آبجکت JSON را که مطابق با ساختار طرح است برمی گرداند: Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}}]}}
به راحتی می توانید با گسترش پرس و جو با هر یک از انواع توصیف شده در نوع Bio ، متغیرهای بیشتری را از بایوس بازیابی کنید. همچنین ، می توانید با مشخص کردن یک id ، bio را بازیابی کنید. برای انجام این کار باید نوع دیگری به Query اضافه کنید و resolver ها را گسترش دهید. به این منظور ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده کد را اضافه کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio }
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })) }; …
فایل را ذخیره کنید و از آن خارج شوید. در ترمینالی که سرور مجازی GraphQL شما در حال اجراست ، CTRL + C را فشار دهید تا آن را از حالت اجرا متوقف کنید، سپس دستور زیر را برای راه اندازی مجدد آن اجرا کنید: ⦁ $ npm start ⦁ در پنجره ترمینال دیگر ، درخواست GraphQL زیر را اجرا کنید:
⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bio(id: 1) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁
ورودی برای bio که دارای شناسه برابر با 1 است را برمی گرداند: Output { “data”: { “bio”: { “name”: { “first”: “John”, “last”: “Backus” } } } }
توانایی جستجوی داده ها از یک پایگاه داده تنها ویژگی GraphQL نیست. همچنین می توانید داده ها را در دیتابیس تغییر دهید. برای انجام این کار ، index.js را باز کنید: ⦁ $ sudo nano index.js ⦁ در کنار نوع Query می توانید از نوع Mutation نیز استفاده کنید که به شما امکان می دهد پایگاه داده را جهش دهید. برای استفاده از این نوع ، آن را به طرح اضافه کنید و همچنین با وارد کردن این خطوط هایلایت شده ، انواع ورودی را ایجاد کنید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } …
این نوع ورودی ها تعریف می کنند که کدام متغیرها می توانند به عنوان ورودی استفاده شوند ، که می توانید به آنها در resolver ها دسترسی داشته باشید و از آنها برای درج یک سند جدید در بانک اطلاعاتی استفاده کنید. این کار را با اضافه کردن سطرهای زیر به index.js انجام دهید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘bios’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) }; …
درست همانطور که در مورد resolver ها برای جستارهای معمول گفته شد ، شما باید یک مقدار از resolver در index.js را برگردانید. در مورد جهش که نوع Bio در آن جهش یافته است ، مقدار bio جهش یافته را برمی گردانید. در این مرحله ، فایل index.js شما شامل سطرهای زیر خواهد بود: index.js iconst express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }) .then(client => client.db(‘GraphQL_Test’));
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `);
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) =>context().then(db => db.collection(‘Sample_Data’).find().toArray()), bio: (args, context) =>context().then(db => db.collection(‘Sample_Data’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘Sample_Data’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
ذخیره کنید و از index.js خارج شوید. برای بررسی اینکه جهش جدید شما در حال کار است ، با فشار دادن CTRL + c و اجرای npm در ترمینالی که سرور مجازی GraphQL شما را اجرا می کند ، سرور مجازی GraphQL را مجدداً راه اندازی کنید ، سپس یک بخش ترمینال دیگر را برای اجرای درخواست curl زیر باز کنید. درست مانند درخواست curl برای پرس و جو ، بدنه در پرچم –data به سرور مجازی GraphQL ارسال می شود. قسمت های هایلایت شده به دیتابیس اضافه می شود: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “mutation { addBio(input: { name: { first: \”test\”, last: \”user\” } }) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ نتیجه زیر را به همراه دارد ، بدین معنی که شما یک bio جدید را به بانک اطلاعاتی وارد کرده اید: Output { “data”: { “addBio”: { “name”: { “first”: “test”, “last”: “user” } } } }
در این مرحله ارتباط خود را با MongoDB و سرور مجازی GraphQL ایجاد کردید و با اجرای پرس و جوهای GraphQL می توانید داده ها را از این پایگاه داده بازیابی کنید و جهش دهید. در مرحله بعد ، این سرور مجازی GraphQL را برای دسترسی از راه دور قرار می دهید. مرحله 4 – اجازه دسترسی از راه دور با راه اندازی بانک اطلاعاتی و سرور مجازی GraphQL ، اکنون می توانید سرور مجازی GraphQL را پیکربندی کنید تا امکان دسترسی از راه دور فراهم شود. برای این کار از Nginx استفاده می کنید ، که در آموزش پیش نیاز نحوه نصب Nginx در اوبونتو 18.04 این کار را انجام دادید. این پیکربندی Nginx را می توان در فایل /etc/nginx/sites-available/example.com یافت ، جایی که example.com نام سرور مجازی ی است که در آموزش پیش نیاز اضافه کردید. این فایل را برای ویرایش باز کنید و نام دامنه خود را در example.com جایگزین کنید: ⦁ $ sudo nano /etc/nginx/sites-available/example.com ⦁ در این فایل می توانید یک بلوک سرور مجازی پیدا کنید که به پورت 80 گوش می دهد ، جایی که در حال حاضر مقداری برای server_name در آموزش پیش نیاز تنظیم کرده اید. در داخل این بلوک سرور مجازی ، مقدار root را تغییر دهید تا دایرکتوری باشد که در آن کد را برای سرور مجازی GraphQL ایجاد کرده و index.js را به عنوان فهرست اضافه می کنید. همچنین ، در بلوک لوکیشن ، یک proxy_pass تنظیم کنید تا بتوانید از IP سرور مجازی یا نام دامنه دلخواه خود برای مراجعه به سرور مجازی GraphQL استفاده کنید: /etc/nginx/sites-available/example.com server { listen 80; listen [::]:80;
root /project_name; index index.js;
server_name example.com;
location / { proxy_pass http://localhost:4000/graphql; } }
با اجرای دستور زیر مطمئن شوید که هیچ خطای نحوی Nginx در این فایل پیکربندی وجود ندارد: ⦁ $ sudo nginx -t ⦁ خروجی زیر را دریافت خواهید کرد: Output nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
هنگامی که هیچ خطایی برای فایل پیکربندی یافت نشد ، Nginx را مجدداً راه اندازی کنید: ⦁ $ sudo systemctl restart nginx ⦁ اکنون می توانید با اجرا و جایگزین کردن example.com توسط IP سرور مجازی یا نام دامنه شخصی خود به سرور مجازی GraphQL خود از هر تب بخش ترمینال دسترسی داشته باشید: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://example.com ⦁ همان آبجکت JSON به شیوه مرحله قبلی را برمی گرداند که شامل هر داده اضافی است که ممکن است با استفاده از یک جهش ، اضافه کرده باشید. Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}},{“name”:{“first”:”test”,”last”:”user”}}]}}
اکنون که سرور مجازی GraphQL را از راه دور در دسترس قرار داده اید ، هنگام بستن ترمینال یا راه اندازی مجدد سرور مجازی ، مطمئن شوید که سرور مجازی GraphQL شما متوقف نمیشود. به این ترتیب ، هر زمان که بخواهید درخواست کنید ، پایگاه داده MongoDB شما از طریق سرور مجازی GraphQL قابل دسترسی خواهد بود. برای انجام این کار ، از بسته npm forever استفاده کنید ، یک ابزار CLI که تضمین می کند اسکریپت های خط فرمان شما به طور مداوم اجرا میشوند یا در صورت بروز هرگونه خرابی مجدداً راه اندازی می شوند. Forever را با npm نصب کنید: ⦁ $ sudo npm install forever -g ⦁ پس از انجام کار نصب ، آن را به فایل pack.json اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “deploy”: “forever start –minUptime 2000 –spinSleepTime 5 index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, …
برای راه اندازی سرور مجازی GraphQL با forever فعال ، دستور زیر را اجرا کنید: ⦁ $ npm run deploy ⦁ با این کار فایل index.js حاوی سرور مجازی GraphQL با forever شروع می شود و اطمینان حاصل می کند که در صورت عدم موفقیت ، با حداقل زمان اجرای 2000 میلی ثانیه و 5 میلی ثانیه در هر راه اندازی مجدد کار خود را ادامه می دهید. سرور مجازی GraphQL اکنون به طور مداوم در پس زمینه اجرا می شود ، بنابراین دیگر وقتی می خواهید یک درخواست به سرور مجازی ارسال کنید ، دیگر نیازی به باز کردن تب جدید ندارید. اکنون یک سرور مجازی GraphQL ایجاد کرده اید که از MongoDB برای ذخیره داده استفاده می کند و برای دسترسی به سرور مجازی از راه دور تنظیم شده است. در مرحله بعدی می توانید playground را درGraphiQL را فعال کنید ، که این امکان را برای شما فراهم می کند که سرور مجازی GraphQL را بازرسی کنید. مرحله 5 – فعال کردن playground GraphiQL توانایی ارسال درخواستهای cURL به سرور مجازی GraphQL بسیار عالی است ، اما با داشتن یک رابط کاربری که بتواند بلافاصله درخواستهای GraphQL را اجرا کند ، به خصوص هنگام توسعه ، سریعتر خواهد بود. برای این کار می توانید از GraphiQL ، واسط پشتیبانی شده توسط بسته express-Graphql استفاده کنید. برای فعال کردن GraphiQL ، فایل index.js را ویرایش کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده زیر را اضافه کنید: index.js const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context, graphiql: true })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
فایل را ذخیره کنید و از آن خارج شوید. برای اینکه این تغییرات قابل مشاهده باشند ، با اجرای دستور زیر forever را متوقف شوید: ⦁ $ forever stop index.js ⦁ سپس ، دوباره forever را شروع کنید تا آخرین نسخه سرور مجازی QL در حال اجرا را ببینید ⦁ $ npm run deploy ⦁
یک مرورگر به آدرس http://example.com باز کنید ، و جایگزین example.com را با نام دامنه یا IP سرور مجازی خود جایگزین کنید. playground GraphiQL را خواهید دید که در آن می توانید درخواست های GraphQL را تایپ کنید.
در سمت چپ این playground می توانید پرس و جوهای GraphQL و جهش ها را تایپ کنید ، در حالی که خروجی در سمت راست playground نشان داده خواهد شد. برای آزمایش اینکه آیا کار می کند ، عبارت زیر را در سمت چپ تایپ کنید: query { bios { name { first last } } }
نتیجه مشابه در سمت راست playground ، دوباره با فرمت JSON را نشان میدهد:
اکنون می توانید درخواست های GraphQL را با استفاده از ترمینال و playground GraphiQL ارسال کنید. نتیجه در این آموزش پایگاه داده MongoDB را تنظیم کرده و داده ها را از این پایگاه داده با استفاده از GraphQL ، Node.js و Express برای سرور مجازی بازیابی می کنید و جهش میدهید. علاوه بر این ، Nginx را پیکربندی کردید تا امکان دسترسی از راه دور به این سرور مجازی را فراهم کند. نه تنها می توانید درخواست ها را به طور مستقیم به این سرور مجازی GraphQL ارسال کنید ، بلکه می توانید از GraphiQL به عنوان یک رابط GraphQL در مرورگر GraphQL نیز استفاده کنید. اگر می خواهید در مورد GraphQL اطلاعات کسب کنید ، می توانید فیلم ضبط شده از ارائه من در GraphQL را در NDC {London watch} مشاهده کنید یا برای آموزش در مورد GraphQL به وب سایت howtographql.com مراجعه کنید. برای مطالعه چگونگی تعامل GraphQL با سایر فناوری ها ، به آموزش نحوه تنطیم دستی سرور مجازی Prisma در اوبونتو 18.04 نگاهی بیاندازید، و برای کسب اطلاعات بیشتر در مورد ساخت برنامه های کاربردی با MongoDB ، به نحوه ایجاد بلاگ با Nest.js ، MongoDB و Vue.js مراجعه کنید.
از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :
پارامترهای پیش فرض در جاوا اسکریپت  –  اجرای چندین نسخه PHP بر روی یک سرور Debian 10
نحوه راه اندازی یک پروژه React با برنامه React – نصب و ایمن سازی phpMyAdmin در اوبونتو 18
پیکربندی یک تایید اعتبار مجاز(CA) در CentOS 8  –  تنظیم برنامه Node.js برای تولید در CentOS 7
نصب MariaDB در اوبونتو 18.04  – ایمن کردن Apache با Let’s Encrypt در Debian 10
نحوه نصب Node.js در CentOS 8  –  بازنویسی URL را با mod_rewrite برای Apache در Debian 10
راه اندازی فایروال با استفاده از firewalld در CentOS 8  –  نصب وب سرور Apache در Debian 10
اضافه کردن و حذف کاربران در CentOS 8 –  نصب Apache Tomcat 9 در Debian 10
نصب و استفاده از PostgreSQL در CentOS 8  –  راه اندازی سرور اولیه با Debian 10
نصب MariaDB در CentOS 8  –  چگونه با JSX عناصر واقعی ایجاد کنیم
نصب و پیکربندی VNC در Debian 10  –  استفاده از سرور از راه دور Docker
نصب و ایمن سازی Grafana در اوبونتو 18  –  نحوه نصب Git در CentOS 8
نصب Git در Debian 10 –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرورهای
نحوه نصب Node.js در Debian 10  –  نصب وب سرور Apache در CentOS 7
نحوه نصب Webmin در Debian 10  –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرور
نصب وردپرس با بانک اطلاعاتی در اوبونتو  – ساخت و استقرار سرور GraphQL با Node.js و MongoDB
نصب پایتون 3 و تنظیم نویسی محلی macOS  – نصب و ایمن سازی phpMyAdmin با Nginx در سرور
نصب Nagios 4 و نظارت بر سرور اوبونتو 18  –  نصب Python 3 و تنظیم یک محیط برنامه نویسی
نحوه نصب R بر روی Debian 10  –  راه اندازی سرور Prisma روی اوبونتو 18.04
نصب و پیکربندی Laravel با LEMP در اوبونتو 18  –  نصب و پیکربندی pgAdmin 4 در Server Mode
نصب Python 3 و تنظیم برنامه نویسی CentOS 8 – نصب Jitsi Meet در Ubuntu 18.04
کلمات کلیدی خرید سرور
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
برچسب‌ها:
GraphQL
,
MongoDB
,
Node.js
0 notes
vps23-blog1 · 4 years
Text
ساخت و استقرار سرور GraphQL با Node.js و MongoDB
در سال 2015 توسط فیس بوک به عنوان یک زبان پرس و جو برای API ها منتشر شد که پرس و جو و جهش داده ها از مجموعه داده های مختلف را آسان می کند. از یک نقطه پایانی واحد ، می توانید چندین منبع داده را با یک درخواست POST منفرد جستجو کنید و به جش واردارید. GraphQL برخی از نقص طراحی معمول در معماری REST API را برطرف می کند ، مانند موقعیت هایی که نقطه انتهایی اطلاعات بیشتری را نسبت به آنچه در واقع لازم دارید برمی گرداند. ه��چنین ، هنگام استفاده از API های REST ممکن است برای جمع آوری تمام اطلاعات مورد نیاز خود، ممکن است نیاز به ارسال درخواست به چند مورد از نقاط انتهایی REST داشته باشید – وضعیتی که به آن مشکل n + 1 گفته می شود. نمونه ای از این موارد وقتی پیش می آید که می خواهید اطلاعات کاربر را نشان دهید ، اما باید اطلاعاتی از قبیل جزئیات شخصی و آدرس ها را از نقاط مختلف جمع آوری کنید. این مشکلات برای GraphQL اعمال نمی شوند زیرا تنها یک نقطه پایانی دارد که می تواند داده ها را از چندین مجموعه بازگرداند. داده بازگشتی به پرس و جویی که به این نقطه پایانی ارسال شده بستگی دارد. در این پرس و جو ساختار داده ای را که می خواهید دریافت کنید ، از جمله هر مجموعه داده تو در تو را تعریف می کنید. علاوه بر یک پرس و جو ، می توانید از یک جهش برای تغییر داده ها روی یک سرور مجازی GraphQL و یک اشتراک نیز برای مشاهده تغییرات در داده استفاده کنید. برای کسب اطلاعات بیشتر در مورد GraphQL و مفاهیم آن ، می توانید به مطالب موجود در وب سایت رسمی مراجعه کنید. از آنجا که GraphQL یک زبان پرس و جو با انعطاف پذیری زیاد است ، به خصوص با داده های مبتنی بر مستندات مانند MongoDB ترکیب می شود. هر دو فناوری مبتنی بر طرحواره های سلسله مراتبی ، تایپ شده هستند و در جامعه جاوا اسکریپت محبوب میباشند. همچنین ، داده های MongoDB به عنوان اشیاء JSON ذخیره می شوند ، بنابراین هیچ تجزیه و تحلیل اضافی در سرور مجازی GraphQL لازم نیست. در این آموزش ، یک سرور مجازی GraphQL با Node.js ایجاد خواهید کرد و می توانید داده ها را از یک پایگاه داده MongoDB که در اوبونتو 18.04 در حال اجرا است ، پرس و جو کنید و جهش دهید. در پایان این آموزش ، شما می توانید با استفاده از یک نقطه پایانی واحد، هم با ارسال درخواست به سرور مجازی به طور مستقیم از طریق ترمینال و هم با استفاده از رابط پیش ساخته playground در GraphiQL به داده های موجود در بانک اطلاعاتی خود دسترسی داشته باشید. با استفاده از این playground می توانید محتویات سرور مجازی GraphQL را با ارسال پرس و جوها ، جهش ها و اشتراک ها کشف کنید. همچنین ، می توانید نمایش های بصری از طرح هایی را که برای این سرور مجازی تعریف شده است ، پیدا کنید. در پایان این آموزش ، شما از playground GraphiQL برای ارتباط سریع سرور مجازی GraphQL خود استفاده خواهید کرد:
پیش نیازها قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت: ⦁ سرور مجازی Ubuntu 18.04 که با پیروی از راهنمای تنظیم اولیه سرور مجازی Ubuntu 18.04 تنظیم شده باشد، شامل یک کاربر sudo غیر ریشه و فایروال نیز باشد. ⦁ نصب MongoDB و اجرای آن در اوبونتو 18.04 که می توانید با دنبال کردن آموزش نحوه نصب MongoDB در اوبونتو 18.04 آن را تنظیم کنید. ⦁ Nginx نصب شده ، همانطور که در نحوه نصب Nginx در Ubuntu 18.04 مشاهده می شود ، از جمله مرحله 4 – تنظیم بلوک های سرور مجازی. ⦁ برای دسترسی از راه دور به سرور مجازی GraphQL ، به یک نام دامنه کاملاً واجد شرایط (FQDN) و یک رکورد A نیاز دارید که به IP سرور مجازی شما اشاره کند. در صورت داشتن حساب vpsgol ، می توانید اطلاعات بیشتری در مورد این مورد با خواندن طریق مقدمه DNS اصطلاحات ، مؤلفه ها و مفاهیم ، یا اسناد دامنه و DNS کسب کنید. ⦁ آشنایی با JavaScript ، که می توانید از مجموعه نحوه کدنویسی در جاواسکریپت بیاموزید. مرحله 1 – تنظیم بانک اطلاعاتی MongoDB قبل از ایجاد سرور مجازی GraphQL ، اطمینان حاصل کنید که پایگاه داده شما درست پیکربندی شده باشد ، تأیید هویت آن فعال باشد و با داده های نمونه پر شده باشد. برای این کار باید از اعلان خط فرمان به سرور مجازی Ubuntu 18.04 که پایگاه داده MongoDB است متصل شوید. کلیه مراحل این آموزش در این سرور مجازی انجام خواهد شد. بعد از برقراری اتصال ، دستور زیر را اجرا کنید تا بررسی کنید که آیا MongoDB فعال و روی سرور مجازی شما فعال است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را در ترمینال خود مشاهده خواهید کرد ، نشان می دهد که بانک اطلاعاتی MongoDB به طور فعال در حال اجرا است: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
قبل از ایجاد دیتابیس که داده های نمونه را در آن ذخیره می کنید ، ابتدا باید یک کاربر ادمین ایجاد کنید ، زیرا کاربران عادی در یک پایگاه داده خاص قرار می گیرند. می توانید با اجرای دستور زیر که پوسته MongoDB را باز می کند ، این کار را انجام دهید: ⦁ $ mongo ⦁ با پوسته MongoDB دسترسی مستقیم به پایگاه داده MongoDB خواهید داشت و می توانید کاربران یا بانکهای اطلاعاتی و داده های پرس و جو ایجاد کنید. در داخل این پوسته ، دستور زیر را اجرا کنید که یک کاربر ادمین جدید را به MongoDB اضافه می کند. می توانید کلمات کلیدی هایلایت شده را با نام کاربری و رمز ورود خود جایگزین کنید ، اما فراموش نکنید که آنها را در جایی بنویسید. ⦁ mongo> use admin ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “admin_username”, ⦁ mongo> pwd: “admin_password”, ⦁ ⦁ mongo> roles: [{ role: “root”, db: “admin”}] ⦁ ⦁ mongo> })
خط اول دستور قبلی دیتابیس را با نام ادمین انتخاب می کند ، یعنی همان دیتابیسی که تمام نقش های ادمین در آن ذخیره می شود. با روش db.createUser () می توانید کاربر واقعی ایجاد کرده و نام کاربری ، رمزعبور و نقش های آن را تعریف کنید. اجرای این فرمان خروجی زیر را برمی گرداند: Output Successfully added user: { “user” : “admin_username”, “roles” : [ { “role” : “root”, “db” : “admin” } ] }
اکنون می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، دوباره وارد پوسته MongoDB شوید ، اما این بار با کاربر adminجدید: ⦁ $ mongo -u “admin_username” -p “admin_password” –authenticationDatabase “admin” ⦁ این دستور پوسته MongoDB را به عنوان یک کاربر خاص باز می کند، که در آن پرچم -u نام کاربری و پرچم -p رمز عبور آن کاربر را مشخص می کند. پرچم اضافی –authenticationDatabase مشخص می کند که می خواهید به عنوان ادمین وارد شوید. در مرحله بعد ، به یک بانک اطلاعاتی جدید می روید و سپس از روش db.createUser () برای ایجاد یک کاربر جدید دارای مجوز برای ایجاد تغییر در این پایگاه داده استفاده می کنید. بخش هایلایت شده را با اطلاعات مورد نظر خود جایگزین کنید ، حتما این مدارک را یادداشت کنید. دستور زیر را در پوسته MongoDB اجرا کنید: ⦁ mongo> use database_name ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “username”, ⦁ ⦁ mongo> pwd: “password”, ⦁ ⦁ mongo> roles: [“readWrite”] ⦁ ⦁ mongo> })
با این کار خروجی زیر باز می گردد: Output Successfully added user: { “user” : “username”, “roles” : [“readWrite”] }
پس از ایجاد دیتابیس و کاربر ، این بانک اطلاعاتی را با داده های نمونه ای پر کنید که بعداً در این آموزش توسط سرور مجازی GraphQL می توانید جستجو کنید. برای این کار ، می توانید از نمونه مجموعه bios از وب سایت MongoDB استفاده کنید. با اجرای دستورات در قطعه کد زیر ، نسخه کوچکتری از این مجموعه داده bios را در پایگاه داده خود وارد می کنید. می توانید بخش های هایلایت شده را با اطلاعات شخصی خود جایگزین کنید ، اما برای اهداف این آموزش ، نام مجموعه را bios بگذارید: ⦁ mongo> db.bios.insertMany([ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : 1,
⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ ⦁ mongo> “last” : “Backus” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1924-12-03T05:00:00Z”), ⦁ mongo> “death” : ISODate(“2007-03-17T04:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Fortran”, ⦁ ⦁ mongo> “ALGOL”, ⦁ ⦁ mongo> “Backus-Naur Form”, ⦁ ⦁ mongo> “FP” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “W.W. McDowell Award”, ⦁ ⦁ mongo> “year” : 1967, ⦁ ⦁ mongo> “by” : “IEEE Computer Society” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1975, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1977, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Draper Prize”, ⦁ ⦁ mongo> “year” : 1993, ⦁ ⦁ mongo> “by” : “National Academy of Engineering” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : ObjectId(“51df07b094c6acd67e492f41”), ⦁ ⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ mongo> “last” : “McCarthy” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1927-09-04T04:00:00Z”), ⦁ ⦁ mongo> “death” : ISODate(“2011-12-24T05:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Lisp”, ⦁ ⦁ mongo> “Artificial Intelligence”, ⦁ ⦁ mongo> “ALGOL” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1971, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ mongo> “award” : “Kyoto Prize”, ⦁ ⦁ mongo> “year” : 1988, ⦁ ⦁ mongo> “by” : “Inamori Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1990, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ]);
این بلوک کد آرایه ای از آبجکت های مختلفی است که حاوی اطلاعات مربوط به دانشمندان موفق گذشته میباشد. پس از اجرای این دستورات برای وارد کردن این مجموعه به پایگاه داده خود ، پیام زیر را دریافت خواهید کرد که نشان می دهد داده ها اضافه شده اند: Output { “acknowledged” : true, “insertedIds” : [ 1, ObjectId(“51df07b094c6acd67e492f41”) ] }
پس از مشاهده پیام موفقیت ، می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، نصب MongoDB را پیکربندی کنید تا مجوز را فعال کنید و فقط کاربران معتبر بتوانند به داده ها دسترسی پیدا کنند. برای ویرایش پیکربندی نصب MongoDB ، فایل حاوی تنظیمات این نصب را باز کنید: ⦁ $ sudo nano /etc/mongodb.conf ⦁ برای فعال کردن مجوز ، خط هایلایت شده را در کد زیر را باطل کنید: /etc/mongodb.conf … # Turn on/off security. Off is currently the default #noauth = true auth = true …
برای فعال کردن این تغییرات ، MongoDB را مجدداً راه اندازی کنید: ⦁ $ Sudo systemctl restart mongodb ⦁ با اجرای دستور مطمئن شوید که پایگاه داده دوباره در حال اجرا است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را مشاهده خواهید کرد: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
برای اطمینان از اینکه کاربر شما می تواند به دیتابیسی که ایجاد کرده اید وصل شود ، سعی کنید پوسته MongoDB را به عنوان یک کاربر معتبر با دستور زیر باز کنید: ⦁ $ mongo -u “username” -p “password” –authenticationDatabase “database_name” ⦁
از همان پرچم های قبلی استفاده میکند، فقط این بار –authenticationDatabase روی پایگاه داده ای که ایجاد کرده اید تنظیم میشود و با داده های نمونه پر میگردد. اکنون با موفقیت یک کاربر ادمین و کاربر دیگری را اضافه کرده اید که دسترسی به خواندن / نوشتن اطلاعات پایگاه داده با داده های نمونه را دارد. همچنین ، پایگاه داده دارای مجوزهای فعال است به این معنی که یک نام کاربری و رمزعبور برای دسترسی به آن نیاز دارید. در مرحله بعد سرور مجازی GraphQL را ایجاد خواهید کرد که بعداً در آموزش به این پایگاه داده وصل می شود. مرحله دوم – ایجاد سرور مجازی GraphQL با پیکربندی پایگاه داده و پر شدن با داده های نمونه ، زمان آن رسیده که یک سرور مجازی GraphQL ایجاد کنیم که بتواند این داده ها را پرس و جو کند و جهش دهد. برای این کار از Express و express-Graphql استفاده می کنید ، که هر دو در Node اجرا می شوند. Express یک چارچوب سبک برای ایجاد سریع سرور مجازی های HTTP Node.js است و Express-Graphql میان افزار را برای ایجاد سریع سرور مجازی های GraphQL امکان پذیر می کند. اولین قدم اطمینان از به روزرسانی دستگاه شما است: ⦁ $ sudo apt update ⦁ در مرحله بعد با اجرای دستورات زیر Node.js را روی سرور مجازی خود نصب کنید. به همراه Node.js همچنین npm را نصب خواهید کرد ، یک مدیر بسته برای JavaScript که روی Node.js. اجرا می شود. ⦁ $ sudo apt install nodejs npm ⦁ پس از طی مراحل نصب ، بررسی کنید که آیا نسخه Node.js که اخیراً نصب کرده اید v8.10.0 یا بالاتر است: ⦁ $ node -v ⦁ با این کار خروجی زیر باز می گردد: Output v8.10.0
برای شروع یک پروژه جدید JavaScript ، دستورات زیر را به عنوان کاربر sudo روی سرور مجازی اجرا کنید و کلمات کلیدی هایلایت شده را با نامی برای پروژه خود جایگزین کنید. ابتدا وارد دیرکتوری اصلی سرور مجازی خود شوید: ⦁ $ cd ⦁ پس از آنجا دایرکتوری جدیدی به همراه نام پروژه خود ایجاد کنید: ⦁ $ mkdir project_name ⦁ به این دیرکتوری بروید: ⦁ $ cd project_name ⦁ در آخر ، یک بسته npm جدید را با دستور زیر تنظیم کنید: ⦁ $ sudo npm init -y ⦁ بعد از اجرای npm init- پیام موفقیتی را دریافت خواهید کرد که فایل pack.json زیر ایجاد شده است: Output Wrote to /home/username/project_name/package.json:
{ “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” }
توجه: همچنین می توانید npm init را بدون پرچم -y اجرا کنید ، که پس از آن به سؤالات مختلفی برای تنظیم نام پروژه ، نویسنده ، و غیره پاسخ می دهید. می توانید جزئیات را وارد کنید یا فقط برای ادامه کلید Enter را بزنید.
اکنون که پروژه را آغاز کردید ، بسته های لازم برای راه اندازی سرور مجازی GraphQL را نصب کنید: ⦁ $ sudo npm install –save express express-graphql graphql ⦁ یک فایل جدید با نام index.js ایجاد کنید و متعاقباً با اجرای دستور زیر این فایل را باز کنید: ⦁ $ sudo nano index.js ⦁ در مرحله بعد ، بلوک کد ��یر را در فایل تازه ایجاد شده برای تنظیم سرور مجازی GraphQL اضافه کنید: index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’);
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `);
// Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
این بلوک کد از چندین بخش تشکیل شده است که همه مهم هستند. ابتدا شمای داده هایی را که توسط GraphQL API برگردانده شده است شرح می دهید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `); … نوع Query تعریف می کند چه پرس و جوهایی میتوانند اجرا شوند و به چه فرمتی می توانند نتیجه را برگردانند. همانطور که مشاهده می کنید ، تنها پرس و جوی تعریف شده hello است که داده ها را با فرمت String برمی گرداند. در بخش بعدی ، resolvers تعیین می شوند ، جایی که داده ها با طرح هایی که می توانید پرس و جو کنند ، هماهنگ می شوند: index.js … // Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ }; …
این resolverها مستقیماً با طرحواره ها مرتبط هستند و داده هایی را که با این طرح ها مطابقت دارد ، برمی گردانند. قسمت پایانی این بلاک کد سرور مجازی GraphQL را آغاز می کند ، نقطه پایانی API را با Express ایجاد می کند و پورتی را که انتهای GraphQL در آن در حال اجرا است توضیح می دهد: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
بعد از افزودن این خطوط ، ذخیره کنید و از index.js خارج شوید. در مرحله بعد ، برای اجرای سرور مجازی GraphQL ، باید فایل index.js را با Node.js. اجرا کنید. این کار به صورت دستی از خط فرمان قابل انجام است ، اما معمول است که فایل pack.json را تنظیم کنید تا این کار برای شما انجام شود. فایل pack.json را باز کنید: ⦁ $ sudo nano package.json ⦁ خط هایلایت شده زیر را به این فایل اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” } فایل را ذخیره کنید و از آن خارج شوید. برای راه اندازی سرور مجازی GraphQL ، دستور زیر را در ترمینال اجرا کنید: ⦁ $ npm start ⦁ پس از اجرای این برنامه ، اعلان ترمینال ناپدید می شود و پیامی برای تأیید سرور مجازی GraphQL ظاهر می شود: Output 🚀 Server ready at http://localhost:4000/graphql
اگر اکنون بخش ترمینال دیگری را باز کرده اید ، می توانید با اجرای دستور زیر آزمایش کنید که آیا سرور مجازی GraphQL در حال اجرا است. این کار درخواست POST curlرا با بدنه JSON پس از پرچم –data که شامل پرس و جوی GraphQL شما به نقطه انتهایی محلی است ارسال می کند: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ hello }” }’ http://localhost:4000/graphql ⦁ با این کار پرس و جو همانطور که در شمای GraphQL در کد شما شرح داده شده است اجرا می شود و داده ها را با فرمت JSON قابل پیش بینی که یکسان با داده های برگشت یافته در resolver هاست، اجرا می کند: Output { “data”: { “hello”: “Hello world!” } }
توجه: در صورت خراب شدن یا گیر نکردن سرور مجازی اکسپرس ، باید فرایند node که روی سرور مجازی اجرا می شود را به صورت دستی از بین ببرید. برای لغو همه این مراحل ، می توانید موارد زیر را اجرا کنید: ⦁ $ killall node ⦁ پس از آن می توانید با دستور زیر، سرور مجازی GraphQL مجدداً راه اندازی کنید: ⦁ $ npm start ⦁ در این مرحله شما اولین نسخه از سرور مجازی GraphQL را ایجاد کرده اید که هم اکنون در یک نقطه پایانی محلی اجرا می شود که به سرور مجازی شما قابل دسترسی است. در مرحله بعد ، resolver های خود را به پایگاه داده MongoDB وصل خواهید کرد. مرحله 3 – اتصال به بانک اطلاعاتی MongoDB با نظم گیری سرور مجازی GraphQL ، اکنون می توانید ارتباط را با پایگاه داده MongoDB که قبلاً پیکربندی کرده و پر از داده کرده اید ، تنظیم نمایید و یک طرح جدید ایجاد کنید که مطابق با این داده ها باشد. برای اینکه بتوانید از سرور مجازی GraphQL به MongoDB متصل شوید ، بسته JavaScript را برای MongoDB از npm نصب کنید: ⦁ $ sudo npm install –save mongodb ⦁ پس از نصب ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ سپس ، کد هایلایت شده زیر را درست بعد از متعلقات وارد شده به index.js اضافه کنید و مقادیر هایلایت شده را با جزئیات اتصال خود به پایگاه داده محلی MongoDB پر کنید. نام کاربری ، رمز عبور و نام پایگاه داده همان مواردی هستند که در مرحله اول این آموزش ایجاد کرده اید. index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }).then(client => client.db(‘database_name’)); …
این خطوط اتصال به پایگاه داده محلی MongoDB را به تابعی به نام context اضافه می کنند. این تابع context در دسترس هر resolver خواهد بود ، به همین دلیل شما از این گزینه برای تنظیم اتصالات بانک اطلاعاتی استفاده می کنید. در مرحله بعد ، در فایل index.js ، با وارد کردن خطوط هایلایت شده زیر ، تابع context را برای مقداردهی اولیه سرور مجازی GraphQL اضافه کنید: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
اکنون می توانید این تابع context را از طریق resolver های خود فراخوانی کنید و از این طریق متغیرهایی را از پایگاه داده MongoDB بخوانید. اگر به مرحله اول این آموزش بازگردید ، می توانید ببینید که کدام مقادیر در پایگاه داده وجود دارد. از اینجا ، یک طرح جدید GraphQL را تعریف کنید که با این ساختار داده مطابقت دارد. مقدار قبلی را برای طرحواره ثابت با خطوط هایلایت شده زیر بازنویسی کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `); …
نوع Query تغییر کرده است و اکنون مجموعه ای از نوع جدید Bio را برمی گرداند. این نوع جدید شامل چندین نوع از جمله دو نوع غیر اسکالر دیگر name و awards است ، به این معنی که این نوع ها با یک قالب از پیش تعریف شده مانند String یا Float مطابقت ندارند. برای اطلاعات بیشتر در مورد تعریف طرح های GraphQL می توانید به مستندات مربوط به GraphQL مراجعه کنید. همچنین ، از آنجا که resolver ها داده را از دیتابیس به شماتیک گره می زنند ، هنگام ایجاد تغییر در طرح ، کد را برای resolver ها به روز کنید. یک resolver جدید ایجاد کنید که به آن bios گفته می شود ، , برابر با Query است که می توانید در طرحواره و نام مجموعه در بانک اطلاعاتی پیدا کنید. توجه داشته باشید که در این حالت ، نام مجموعه در db.collection (“bios”) ، bios است ، اما اگر نام دیگری به مجموعه خود اختصاص داده باشید ، این نام تغییر خواهد کرد. خط هایلایت شده زیر را به index.js اضافه کنید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()) }; …
این تابع از تابع context استفاده می کند ، که می توانید برای بازیابی متغیرها از پایگاه داده MongoDB استفاده کنید. پس از انجام این تغییرات در کد ، index.js را ذخیره کنید و از آن خارج شوید. برای فعال سازی این تغییرات ، باید سرور مجازی GraphQL را مجدداً راه اندازی کنید. با استفاده از ترکیب صفحه کلید CTRL + C می توانید روند فعلی را متوقف کرده و با اجرای دستور زیر، سرور مجازی GraphQL را شروع کنید: ⦁ $ npm start ⦁ اکنون می توانید از طرحواره به روز شده استفاده کرده و داده هایی را که درون پایگاه داده است ، جستجو کنید. اگر به طرحواره نگاه کنید ، خواهید دید که Query برای bios نوع Bio را برمی گرداند. همچنین می تواند type name را برگرداند. برای بازگرداندن تمام اسامی اول و خانوادگی برای همه bioها در پایگاه داده ، درخواست زیر را در یک پنجره ترمینال جدید به سرور مجازی GraphQL بفرستید: ⦁ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ دوباره یک آبجکت JSON را که مطابق با ساختار طرح است برمی گرداند: Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}}]}}
به راحتی می توانید با گسترش پرس و جو با هر یک از انواع توصیف شده در نوع Bio ، متغیرهای بیشتری را از بایوس بازیابی کنید. همچنین ، می توانید با مشخص کردن یک id ، bio را بازیابی کنید. برای انجام این کار باید نوع دیگری به Query اضافه کنید و resolver ها را گسترش دهید. به این منظور ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده کد را اضافه کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio }
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })) }; …
فایل را ذخیره کنید و از آن خارج شوید. در ترمینالی که سرور مجازی GraphQL شما در حال اجراست ، CTRL + C را فشار دهید تا آن را از حالت اجرا متوقف کنید، سپس دستور زیر را برای راه اندازی مجدد آن اجرا کنید: ⦁ $ npm start ⦁ در پنجره ترمینال دیگر ، درخواست GraphQL زیر را اجرا کنید:
⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bio(id: 1) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁
ورودی برای bio که دارای شناسه برابر با 1 است را برمی گرداند: Output { “data”: { “bio”: { “name”: { “first”: “John”, “last”: “Backus” } } } }
توانایی جستجوی داده ها از یک پایگاه داده تنها ویژگی GraphQL نیست. همچنین می توانید داده ها را در دیتابیس تغییر دهید. برای انجام این کار ، index.js را باز کنید: ⦁ $ sudo nano index.js ⦁ در کنار نوع Query می توانید از نوع Mutation نیز استفاده کنید که به شما امکان می دهد پایگاه داده را جهش دهید. برای استفاده از این نوع ، آن را به طرح اضافه کنید و همچنین با وارد کردن این خطوط هایلایت شده ، انواع ورودی را ایجاد کنید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } …
این نوع ورودی ها تعریف می کنند که کدام متغیرها می توانند به عنوان ورودی استفاده شوند ، که می توانید به آنها در resolver ها دسترسی داشته باشید و از آنها برای درج یک سند جدید در بانک اطلاعاتی استفاده کنید. این کار را با اضافه کردن سطرهای زیر به index.js انجام دهید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘bios’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) }; …
درست همانطور که در مورد resolver ها برای جستارهای معمول گفته شد ، شما باید یک مقدار از resolver در index.js را برگردانید. در مورد جهش که نوع Bio در آن جهش یافته است ، مقدار bio جهش یافته را برمی گردانید. در این مرحله ، فایل index.js شما شامل سطرهای زیر خواهد بود: index.js iconst express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }) .then(client => client.db(‘GraphQL_Test’));
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `);
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) =>context().then(db => db.collection(‘Sample_Data’).find().toArray()), bio: (args, context) =>context().then(db => db.collection(‘Sample_Data’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘Sample_Data’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
ذخیره کنید و از index.js خارج شوید. برای بررسی اینکه جهش جدید شما در حال کار است ، با فشار دادن CTRL + c و اجرای npm در ترمینالی که سرور مجازی GraphQL شما را اجرا می کند ، سرور مجازی GraphQL را مجدداً راه اندازی کنید ، سپس یک بخش ترمینال دیگر را برای اجرای درخواست curl زیر باز کنید. درست مانند درخواست curl برای پرس و جو ، بدنه در پرچم –data به سرور مجازی GraphQL ارسال می شود. قسمت های هایلایت شده به دیتابیس اضافه می شود: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “mutation { addBio(input: { name: { first: \”test\”, last: \”user\” } }) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ نتیجه زیر را به همراه دارد ، بدین معنی که شما یک bio جدید را به بانک اطلاعاتی وارد کرده اید: Output { “data”: { “addBio”: { “name”: { “first”: “test”, “last”: “user” } } } }
در این مرحله ارتباط خود را با MongoDB و سرور مجازی GraphQL ایجاد کردید و با اجرای پرس و جوهای GraphQL می توانید داده ها را از این پایگاه داده بازیابی کنید و جهش دهید. در مرحله بعد ، این سرور مجازی GraphQL را برای دسترسی از راه دور قرار می دهید. مرحله 4 – اجازه دسترسی از راه دور با راه اندازی بانک اطلاعاتی و سرور مجازی GraphQL ، اکنون می توانید سرور مجازی GraphQL را پیکربندی کنید تا امکان دسترسی از راه دور فراهم شود. برای این کار از Nginx استفاده می کنید ، که در آموزش پیش نیاز نحوه نصب Nginx در اوبونتو 18.04 این کار را انجام دادید. این پیکربندی Nginx را می توان در فایل /etc/nginx/sites-available/example.com یافت ، جایی که example.com نام سرور مجازی ی است که در آموزش پیش نیاز اضافه کردید. این فایل را برای ویرایش باز کنید و نام دامنه خود را در example.com جایگزین کنید: ⦁ $ sudo nano /etc/nginx/sites-available/example.com ⦁ در این فایل می توانید یک بلوک سرور مجازی پیدا کنید که به پورت 80 گوش می دهد ، جایی که در حال حاضر مقداری برای server_name در آموزش پیش نیاز تنظیم کرده اید. در داخل این بلوک سرور مجازی ، مقدار root را تغییر دهید تا دایرکتوری باشد که در آن کد را برای سرور مجازی GraphQL ایجاد کرده و index.js را به عنوان فهرست اضافه می کنید. همچنین ، در بلوک لوکیشن ، یک proxy_pass تنظیم کنید تا بتوانید از IP سرور مجازی یا نام دامنه دلخواه خود برای مراجعه به سرور مجازی GraphQL استفاده کنید: /etc/nginx/sites-available/example.com server { listen 80; listen [::]:80;
root /project_name; index index.js;
server_name example.com;
location / { proxy_pass http://localhost:4000/graphql; } }
با اجرای دستور زیر مطمئن شوید که هیچ خطای نحوی Nginx در این فایل پیکربندی وجود ندارد: ⦁ $ sudo nginx -t ⦁ خروجی زیر را دریافت خواهید کرد: Output nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
هنگامی که هیچ خطایی برای فایل پیکربندی یافت نشد ، Nginx را مجدداً راه اندازی کنید: ⦁ $ sudo systemctl restart nginx ⦁ اکنون می توانید با اجرا و جایگزین کردن example.com توسط IP سرور مجازی یا نام دامنه شخصی خود به سرور مجازی GraphQL خود از هر تب بخش ترمینال دسترسی داشته باشید: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://example.com ⦁ همان آبجکت JSON به شیوه مرحله قبلی را برمی گرداند که شامل هر داده اضافی است که ممکن است با استفاده از یک جهش ، اضافه کرده باشید. Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}},{“name”:{“first”:”test”,”last”:”user”}}]}}
اکنون که سرور مجازی GraphQL را از راه دور در دسترس قرار داده اید ، هنگام بستن ترمینال یا راه اندازی مجدد سرور مجازی ، مطمئن شوید که سرور مجازی GraphQL شما متوقف نمیشود. به این ترتیب ، هر زمان که بخواهید درخواست کنید ، پایگاه داده MongoDB شما از طریق سرور مجازی GraphQL قابل دسترسی خواهد بود. برای انجام این کار ، از بسته npm forever استفاده کنید ، یک ابزار CLI که تضمین می کند اسکریپت های خط فرمان شما به طور مداوم اجرا میشوند یا در صورت بروز هرگونه خرابی مجدداً راه اندازی می شوند. Forever را با npm نصب کنید: ⦁ $ sudo npm install forever -g ⦁ پس از انجام کار نصب ، آن را به فایل pack.json اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “deploy”: “forever start –minUptime 2000 –spinSleepTime 5 index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, …
برای راه اندازی سرور مجازی GraphQL با forever فعال ، دستور زیر را اجرا کنید: ⦁ $ npm run deploy ⦁ با این کار فایل index.js حاوی سرور مجازی GraphQL با forever شروع می شود و اطمینان حاصل می کند که در صورت عدم موفقیت ، با حداقل زمان اجرای 2000 میلی ثانیه و 5 میلی ثانیه در هر راه اندازی مجدد کار خود را ادامه می دهید. سرور مجازی GraphQL اکنون به طور مداوم در پس زمینه اجرا می شود ، بنابراین دیگر وقتی می خواهید یک درخواست به سرور مجازی ارسال کنید ، دیگر نیازی به باز کردن تب جدید ندارید. اکنون یک سرور مجازی GraphQL ایجاد کرده اید که از MongoDB برای ذخیره داده استفاده می کند و برای دسترسی به سرور مجازی از راه دور تنظیم شده است. در مرحله بعدی می توانید playground را درGraphiQL را فعال کنید ، که این امکان را برای شما فراهم می کند که سرور مجازی GraphQL را بازرسی کنید. مرحله 5 – فعال کردن playground GraphiQL توانایی ارسال درخواستهای cURL به سرور مجازی GraphQL بسیار عالی است ، اما با داشتن یک رابط کاربری که بتواند بلافاصله درخواستهای GraphQL را اجرا کند ، به خصوص هنگام توسعه ، سریعتر خواهد بود. برای این کار می توانید از GraphiQL ، واسط پشتیبانی شده توسط بسته express-Graphql استفاده کنید. برای فعال کردن GraphiQL ، فایل index.js را ویرایش کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده زیر را اضافه کنید: index.js const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context, graphiql: true })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
فایل را ذخیره کنید و از آن خارج شوید. برای اینکه این تغییرات قابل مشاهده باشند ، با اجرای دستور زیر forever را متوقف شوید: ⦁ $ forever stop index.js ⦁ سپس ، دوباره forever را شروع کنید تا آخرین نسخه سرور مجازی QL در حال اجرا را ببینید ⦁ $ npm run deploy ⦁
یک مرورگر به آدرس http://example.com باز کنید ، و جایگزین example.com را با نام دامنه یا IP سرور مجازی خود جایگزین کنید. playground GraphiQL را خواهید دید که در آن می توانید درخواست های GraphQL را تایپ کنید.
در سمت چپ این playground می توانید پرس و جوهای GraphQL و جهش ها را تایپ کنید ، در حالی که خروجی در سمت راست playground نشان داده خواهد شد. برای آزمایش اینکه آیا کار می کند ، عبارت زیر را در سمت چپ تایپ کنید: query { bios { name { first last } } }
نتیجه مشابه در سمت راست playground ، دوباره با فرمت JSON را نشان میدهد:
اکنون می توانید درخواست های GraphQL را با استفاده از ترمینال و playground GraphiQL ارسال کنید. نتیجه در این آموزش پایگاه داده MongoDB را تنظیم کرده و داده ها را از این پایگاه داده با استفاده از GraphQL ، Node.js و Express برای سرور مجازی بازیابی می کنید و جهش میدهید. علاوه بر این ، Nginx را پیکربندی کردید تا امکان دسترسی از راه دور به این سرور مجازی را فراهم کند. نه تنها می توانید درخواست ها را به طور مستقیم به این سرور مجازی GraphQL ارسال کنید ، بلکه می توانید از GraphiQL به عنوان یک رابط GraphQL در مرورگر GraphQL نیز استفاده کنید. اگر می خواهید در مورد GraphQL اطلاعات کسب کنید ، می توانید فیلم ضبط شده از ارائه من در GraphQL را در NDC {London watch} مشاهده کنید یا برای آموزش در مورد GraphQL به وب سایت howtographql.com مراجعه کنید. برای مطالعه چگونگی تعامل GraphQL با سایر فناوری ها ، به آموزش نحوه تنطیم دستی سرور مجازی Prisma در اوبونتو 18.04 نگاهی بیاندازید، و برای کسب اطلاعات بیشتر در مورد ساخت برنامه های کاربردی با MongoDB ، به نحوه ایجاد بلاگ با Nest.js ، MongoDB و Vue.js مراجعه کنید.
از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :
پارامترهای پیش فرض در جاوا اسکریپت  –  اجرای چندین نسخه PHP بر روی یک سرور Debian 10
نحوه راه اندازی یک پروژه React با برنامه React – نصب و ایمن سازی phpMyAdmin در اوبونتو 18
پیکربندی یک تایید اعتبار مجاز(CA) در CentOS 8  –  تنظیم برنامه Node.js برای تولید در CentOS 7
نصب MariaDB در اوبونتو 18.04  – ایمن کردن Apache با Let’s Encrypt در Debian 10
نحوه نصب Node.js در CentOS 8  –  بازنویسی URL را با mod_rewrite برای Apache در Debian 10
راه اندازی فایروال با استفاده از firewalld در CentOS 8  –  نصب وب سرور Apache در Debian 10
اضافه کردن و حذف کاربران در CentOS 8 –  نصب Apache Tomcat 9 در Debian 10
نصب و استفاده از PostgreSQL در CentOS 8  –  راه اندازی سرور اولیه با Debian 10
نصب MariaDB در CentOS 8  –  چگونه با JSX عناصر واقعی ایجاد کنیم
نصب و پیکربندی VNC در Debian 10  –  استفاده از سرور از راه دور Docker
نصب و ایمن سازی Grafana در اوبونتو 18  –  نحوه نصب Git در CentOS 8
نصب Git در Debian 10 –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرورهای
نحوه نصب Node.js در Debian 10  –  نصب وب سرور Apache در CentOS 7
نحوه نصب Webmin در Debian 10  –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرور
نصب وردپرس با بانک اطلاعاتی در اوبونتو  – ساخت و استقرار سرور GraphQL با Node.js و MongoDB
نصب پایتون 3 و تنظیم نویسی محلی macOS  – نصب و ایمن سازی phpMyAdmin با Nginx در سرور
نصب Nagios 4 و نظارت بر سرور اوبونتو 18  –  نصب Python 3 و تنظیم یک محیط برنامه نویسی
نحوه نصب R بر روی Debian 10  –  راه اندازی سرور Prisma روی اوبونتو 18.04
نصب و پیکربندی Laravel با LEMP در اوبونتو 18  –  نصب و پیکربندی pgAdmin 4 در Server Mode
نصب Python 3 و تنظیم برنامه نویسی CentOS 8 – نصب Jitsi Meet در Ubuntu 18.04
کلمات کلیدی خرید سرور
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
برچسب‌ها:
GraphQL
,
MongoDB
,
Node.js
0 notes
vps200-blog · 4 years
Text
ساخت و استقرار سرور GraphQL با Node.js و MongoDB
در سال 2015 توسط فیس بوک به عنوان یک زبان پرس و جو برای API ها منتشر شد که پرس و جو و جهش داده ها از مجموعه داده های مختلف را آسان می کند. از یک نقطه پایانی واحد ، می توانید چندین منبع داده را با یک درخواست POST منفرد جستجو کنید و به جش واردارید. GraphQL برخی از نقص طراحی معمول در معماری REST API را برطرف می کند ، مانند موقعیت هایی که نقطه انتهایی اطلاعات بیشتری را نسبت به آنچه در واقع لازم دارید برمی گرداند. همچنین ، هنگام استفاده از API های REST ممکن است برای جمع آوری تمام اطلاعات مورد نیاز خود، ممکن است نیاز به ارسال درخواست به چند مورد از نقاط انتهایی REST داشته باشید – وضعیتی که به آن مشکل n + 1 گفته می شود. نمونه ای از این موارد وقتی پیش می آید که می خواهید اطلاعات کاربر را نشان دهید ، اما باید اطلاعاتی از قبیل جزئیات شخصی و آدرس ها را از نقاط مختلف جمع آوری کنید. این مشکلات برای GraphQL اعمال نمی شوند زیرا تنها یک نقطه پایانی دارد که می تواند داده ها را از چندین مجموعه بازگرداند. داده بازگشتی به پرس و جویی که به این نقطه پایانی ارسال شده بستگی دارد. در این پرس و جو ساختار داده ای را که می خواهید دریافت کنید ، از جمله هر مجموعه داده تو در تو را تعریف می کنید. علاوه بر یک پرس و جو ، می توانید از یک جهش برای تغییر داده ها روی یک سرور مجازی GraphQL و یک اشتراک نیز برای مشاهده تغییرات در داده استفاده کنید. برای کسب اطلاعات بیشتر در مورد GraphQL و مفاهیم آن ، می توانید به مطالب موجود در وب سایت رسمی مراجعه کنید. از آنجا که GraphQL یک زبان پرس و جو با انعطاف پذیری زیاد است ، به خصوص با داده های مبتنی بر مستندات مانند MongoDB ترکیب می شود. هر دو فناوری مبتنی بر طرحواره های سلسله مراتبی ، تایپ شده هستند و در جامعه جاوا اسکریپت محبوب میباشند. همچنین ، داده های MongoDB به عنوان اشیاء JSON ذخیره می شوند ، بنابراین هیچ تجزیه و تحلیل اضافی در سرور مجازی GraphQL لازم نیست. در این آموزش ، یک سرور مجازی GraphQL با Node.js ایجاد خواهید کرد و می توانید داده ها را از یک پایگاه داده MongoDB که در اوبونتو 18.04 در حال اجرا است ، پرس و جو کنید و جهش دهید. در پایان این آموزش ، شما می توانید با استفاده از یک نقطه پایانی واحد، هم با ارسال درخواست به سرور مجازی به طور مستقیم از طریق ترمینال و هم با استفاده از رابط پیش ساخته playground در GraphiQL به داده های موجود در بانک اطلاعاتی خود دسترسی داشته باشید. با استفاده از این playground می توانید محتویات سرور مجازی GraphQL را با ارسال پرس و جوها ، جهش ها و اشتراک ها کشف کنید. همچنین ، می توانید نمایش های بصری از طرح هایی را که برای این سرور مجازی تعریف شده است ، پیدا کنید. در پایان این آموزش ، شما از playground GraphiQL برای ارتباط سریع سرور مجازی GraphQL خود استفاده خواهید کرد:
پیش نیازها قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت: ⦁ سرور مجازی Ubuntu 18.04 که با پیروی از راهنمای تنظیم اولیه سرور مجازی Ubuntu 18.04 تنظیم شده باشد، شامل یک کاربر sudo غیر ریشه و فایروال نیز باشد. ⦁ نصب MongoDB و اجرای آن در اوبونتو 18.04 که می توانید با دنبال کردن آموزش نحوه نصب MongoDB در اوبونتو 18.04 آن را تنظیم کنید. ⦁ Nginx نصب شده ، همانطور که در نحوه نصب Nginx در Ubuntu 18.04 مشاهده می شود ، از جمله مرحله 4 – تنظیم بلوک های سرور مجازی. ⦁ برای دسترسی از راه دور به سرور مجازی GraphQL ، به یک نام دامنه کاملاً واجد شرایط (FQDN) و یک رکورد A نیاز دارید که به IP سرور مجازی شما اشاره کند. در صورت داشتن حساب vpsgol ، می توانید اطلاعات بیشتری در مورد این مورد با خواندن طریق مقدمه DNS اصطلاحات ، مؤلفه ها و مفاهیم ، یا اسناد دامنه و DNS کسب کنید. ⦁ آشنایی با JavaScript ، که می توانید از مجموعه نحوه کدنویسی در جاواسکریپت بیاموزید. مرحله 1 – تنظیم بانک اطلاعاتی MongoDB قبل از ایجاد سرور مجازی GraphQL ، اطمینان حاصل کنید که پایگاه داده شما درست پیکربندی شده باشد ، تأیید هویت آن فعال باشد و با داده های نمونه پر شده باشد. برای این کار باید از اعلان خط فرمان به سرور مجازی Ubuntu 18.04 که پایگاه داده MongoDB است متصل شوید. کلیه مراحل این آموزش در این سرور مجازی انجام خواهد شد. بعد از برقراری اتصال ، دستور زیر را اجرا کنید تا بررسی کنید که آیا MongoDB فعال و روی سرور مجازی شما فعال است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را در ترمینال خود مشاهده خواهید کرد ، نشان می دهد که بانک اطلاعاتی MongoDB به طور فعال در حال اجرا است: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
قبل از ایجاد دیتابیس که داده های نمونه را در آن ذخیره می کنید ، ابتدا باید یک کاربر ادمین ایجاد کنید ، زیرا کاربران عادی در یک پایگاه داده خاص قرار می گیرند. می توانید با اجرای دستور زیر که پوسته MongoDB را باز می کند ، این کار را انجام دهید: ⦁ $ mongo ⦁ با پوسته MongoDB دسترسی مستقیم به پایگاه داده MongoDB خواهید داشت و می توانید کاربران یا بانکهای اطلاعاتی و داده های پرس و جو ایجاد کنید. در داخل این پوسته ، دستور زیر را اجرا کنید که یک کاربر ادمین جدید را به MongoDB اضافه می کند. می توانید کلمات کلیدی هایلایت شده را با نام کاربری و رمز ورود خود جایگزین کنید ، اما فراموش نکنید که آنها را در جایی بنویسید. ⦁ mongo> use admin ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “admin_username”, ⦁ mongo> pwd: “admin_password”, ⦁ ⦁ mongo> roles: [{ role: “root”, db: “admin”}] ⦁ ⦁ mongo> })
خط اول دستور قبلی دیتابیس را با نام ادمین انتخاب می کند ، یعنی همان دیتابیسی که تمام نقش های ادمین در آن ذخیره می شود. با روش db.createUser () می توانید کاربر واقعی ایجاد کرده و نام کاربری ، رمزعبور و نقش های آن را تعریف کنید. اجرای این فرمان خروجی زیر را برمی گرداند: Output Successfully added user: { “user” : “admin_username”, “roles” : [ { “role” : “root”, “db” : “admin” } ] }
اکنون می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، دوباره وارد پوسته MongoDB شوید ، اما این بار با کاربر adminجدید: ⦁ $ mongo -u “admin_username” -p “admin_password” –authenticationDatabase “admin” ⦁ این دستور پوسته MongoDB را به عنوان یک کاربر خاص باز می کند، که در آن پرچم -u نام کاربری و پرچم -p رمز عبور آن کاربر را مشخص می کند. پرچم اضافی –authenticationDatabase مشخص می کند که می خواهید به عنوان ادمین وارد شوید. در مرحله بعد ، به یک بانک اطلاعاتی جدید می روید و سپس از روش db.createUser () برای ایجاد یک کاربر جدید دارای مجوز برای ایجاد تغییر در این پایگاه داده استفاده می کنید. بخش هایلایت شده را با اطلاعات مورد نظر خود جایگزین کنید ، حتما این مدارک را یادداشت کنید. دستور زیر را در پوسته MongoDB اجرا کنید: ⦁ mongo> use database_name ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “username”, ⦁ ⦁ mongo> pwd: “password”, ⦁ ⦁ mongo> roles: [“readWrite”] ⦁ ⦁ mongo> })
با این کار خروجی زیر باز می گردد: Output Successfully added user: { “user” : “username”, “roles” : [“readWrite”] }
پس از ایجاد دیتابیس و کاربر ، این بانک اطلاعاتی را با داده های نمونه ای پر کنید که بعداً در این آموزش توسط سرور مجازی GraphQL می توانید جستجو کنید. برای این کار ، می توانید از نمونه مجموعه bios از وب سایت MongoDB استفاده کنید. با اجرای دستورات در قطعه کد زیر ، نسخه کوچکتری از این مجموعه داده bios را در پایگاه داده خود وارد می کنید. می توانید بخش های هایلایت شده را با اطلاعات شخصی خود جایگزین کنید ، اما برای اهداف این آموزش ، نام مجموعه را bios بگذارید: ⦁ mongo> db.bios.insertMany([ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : 1,
⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ ⦁ mongo> “last” : “Backus” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1924-12-03T05:00:00Z”), ⦁ mongo> “death” : ISODate(“2007-03-17T04:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Fortran”, ⦁ ⦁ mongo> “ALGOL”, ⦁ ⦁ mongo> “Backus-Naur Form”, ⦁ ⦁ mongo> “FP” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “W.W. McDowell Award”, ⦁ ⦁ mongo> “year” : 1967, ⦁ ⦁ mongo> “by” : “IEEE Computer Society” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1975, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1977, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Draper Prize”, ⦁ ⦁ mongo> “year” : 1993, ⦁ ⦁ mongo> “by” : “National Academy of Engineering” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : ObjectId(“51df07b094c6acd67e492f41”), ⦁ ⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ mongo> “last” : “McCarthy” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1927-09-04T04:00:00Z”), ⦁ ⦁ mongo> “death” : ISODate(“2011-12-24T05:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Lisp”, ⦁ ⦁ mongo> “Artificial Intelligence”, ⦁ ⦁ mongo> “ALGOL” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1971, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ mongo> “award” : “Kyoto Prize”, ⦁ ⦁ mongo> “year” : 1988, ⦁ ⦁ mongo> “by” : “Inamori Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1990, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ]);
این بلوک کد آرایه ای از آبجکت های مختلفی است که حاوی اطلاعات مربوط به دانشمندان موفق گذشته میباشد. پس از اجرای این دستورات برای وارد کردن این مجموعه به پایگاه داده خود ، پیام زیر را دریافت خواهید کرد که نشان می دهد داده ها اضافه شده اند: Output { “acknowledged” : true, “insertedIds” : [ 1, ObjectId(“51df07b094c6acd67e492f41”) ] }
پس از مشاهده پیام موفقیت ، می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، نصب MongoDB را پیکربندی کنید تا مجوز را فعال کنید و فقط کاربران معتبر بتوانند به داده ها دسترسی پیدا کنند. برای ویرایش پیکربندی نصب MongoDB ، فایل حاوی تنظیمات این نصب را باز کنید: ⦁ $ sudo nano /etc/mongodb.conf ⦁ برای فعال کردن مجوز ، خط هایلایت شده را در کد زیر را باطل کنید: /etc/mongodb.conf … # Turn on/off security. Off is currently the default #noauth = true auth = true …
برای فعال کردن این تغییرات ، MongoDB را مجدداً راه اندازی کنید: ⦁ $ Sudo systemctl restart mongodb ⦁ با اجرای دستور مطمئن شوید که پایگاه داده دوباره در حال اجرا است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را مشاهده خواهید کرد: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
برای اطمینان از اینکه کاربر شما می تواند به دیتابیسی که ایجاد کرده اید وصل شود ، سعی کنید پوسته MongoDB را به عنوان یک کاربر معتبر با دستور زیر باز کنید: ⦁ $ mongo -u “username” -p “password” –authenticationDatabase “database_name” ⦁
از همان پرچم های قبلی استفاده میکند، فقط این بار –authenticationDatabase روی پایگاه داده ای که ایجاد کرده اید تنظیم میشود و با داده های نمونه پر میگردد. اکنون با موفقیت یک کاربر ادمین و کاربر دیگری را اضافه کرده اید که دسترسی به خواندن / نوشتن اطلاعات پایگاه داده با داده های نمونه را دارد. همچنین ، پایگاه داده دارای مجوزهای فعال است به این معنی که یک نام کاربری و رمزعبور برای دسترسی به آن نیاز دارید. در مرحله بعد سرور مجازی GraphQL را ایجاد خواهید کرد که بعداً در آموزش به این پایگاه داده وصل می شود. مرحله دوم – ایجاد سرور مجازی GraphQL با پیکربندی پایگاه داده و پر شدن با داده های نمونه ، زمان آن رسیده که یک سرور مجازی GraphQL ایجاد کنیم که بتواند این داده ها را پرس و جو کند و جهش دهد. برای این کار از Express و express-Graphql استفاده می کنید ، که هر دو در Node اجرا می شوند. Express یک چارچوب سبک برای ایجاد سریع سرور مجازی های HTTP Node.js است و Express-Graphql میان افزار را برای ایجاد سریع سرور مجازی های GraphQL امکان پذیر می کند. اولین قدم اطمینان از به روزرسانی دستگاه شما است: ⦁ $ sudo apt update ⦁ در مرحله بعد با اجرای دستورات زیر Node.js را روی سرور مجازی خود نصب کنید. به همراه Node.js همچنین npm را نصب خواهید کرد ، یک مدیر بسته برای JavaScript که روی Node.js. اجرا می شود. ⦁ $ sudo apt install nodejs npm ⦁ پس از طی مراحل نصب ، بررسی کنید که آیا نسخه Node.js که اخیراً نصب کرده اید v8.10.0 یا بالاتر است: ⦁ $ node -v ⦁ با این کار خروجی زیر باز می گردد: Output v8.10.0
برای شروع یک پروژه جدید JavaScript ، دستورات زیر را به عنوان کاربر sudo روی سرور مجازی اجرا کنید و کلمات کلیدی هایلایت شده را با نامی برای پروژه خود جایگزین کنید. ابتدا وارد دیرکتوری اصلی سرور مجازی خود شوید: ⦁ $ cd ⦁ پس از آنجا دایرکتوری جدیدی به همراه نام پروژه خود ایجاد کنید: ⦁ $ mkdir project_name ⦁ به این دیرکتوری بروید: ⦁ $ cd project_name ⦁ در آخر ، یک بسته npm جدید را با دستور زیر تنظیم کنید: ⦁ $ sudo npm init -y ⦁ بعد از اجرای npm init- پیام موفقیتی را دریافت خواهید کرد که فایل pack.json زیر ایجاد شده است: Output Wrote to /home/username/project_name/package.json:
{ “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” }
توجه: همچنین می توانید npm init را بدون پرچم -y اجرا کنید ، که پس از آن به سؤالات مختلفی برای تنظیم نام پروژه ، نویسنده ، و غیره پاسخ می دهید. می توانید جزئیات را وارد کنید یا فقط برای ادامه کلید Enter را بزنید.
اکنون که پروژه را آغاز کردید ، بسته های لازم برای راه اندازی سرور مجازی GraphQL را نصب کنید: ⦁ $ sudo npm install –save express express-graphql graphql ⦁ یک فایل جدید با نام index.js ایجاد کنید و متعاقباً با اجرای دستور زیر این فایل را باز کنید: ⦁ $ sudo nano index.js ⦁ در مرحله بعد ، بلوک کد زیر را در فایل تازه ایجاد شده برای تنظیم سرور مجازی GraphQL اضافه کنید: index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’);
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `);
// Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
این بلوک کد از چندین بخش تشکیل شده است که همه مهم هستند. ابتدا شمای داده هایی را که توسط GraphQL API برگردانده شده است شرح می دهید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `); … نوع Query تعریف می کند چه پرس و جوهایی میتوانند اجرا شوند و به چه فرمتی می توانند نتیجه را برگردانند. همانطور که مشاهده می کنید ، تنها پرس و جوی تعریف شده hello است که داده ها را با فرمت String برمی گرداند. در بخش بعدی ، resolvers تعیین می شوند ، جایی که داده ها با طرح هایی که می توانید پرس و جو کنند ، هماهنگ می شوند: index.js … // Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ }; …
این resolverها مستقیماً با طرحواره ها مرتبط هستند و داده هایی را که با این طرح ها مطابقت دارد ، برمی گردانند. قسمت پایانی این بلاک کد سرور مجازی GraphQL را آغاز می کند ، نقطه پایانی API را با Express ایجاد می کند و پورتی را که انتهای GraphQL در آن در حال اجرا است توضیح می دهد: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
بعد از افزودن این خطوط ، ذخیره کنید و از index.js خارج شوید. در مرحله بعد ، برای اجرای سرور مجازی GraphQL ، باید فایل index.js را با Node.js. اجرا کنید. این کار به صورت دستی از خط فرمان قابل انجام است ، اما معمول است که فایل pack.json را تنظیم کنید تا این کار برای شما انجام شود. فایل pack.json را باز کنید: ⦁ $ sudo nano package.json ⦁ خط هایلایت شده زیر را به این فایل اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” } فایل را ذخیره کنید و از آن خارج شوید. برای راه اندازی سرور مجازی GraphQL ، دستور زیر را در ترمینال اجرا کنید: ⦁ $ npm start ⦁ پس از اجرای این برنامه ، اعلان ترمینال ناپدید می شود و پیامی برای تأیید سرور مجازی GraphQL ظاهر می شود: Output 🚀 Server ready at http://localhost:4000/graphql
اگر اکنون بخش ترمینال دیگری را باز کرده اید ، می توانید با اجرای دستور زیر آزمایش کنید که آیا سرور مجازی GraphQL در حال اجرا است. این کار درخواست POST curlرا با بدنه JSON پس از پرچم –data که شامل پرس و جوی GraphQL شما به نقطه انتهایی محلی است ارسال می کند: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ hello }” }’ http://localhost:4000/graphql ⦁ با این کار پرس و جو همانطور که در شمای GraphQL در کد شما شرح داده شده است اجرا می شود و داده ها را با فرمت JSON قابل پیش بینی که یکسان با داده های برگشت یافته در resolver هاست، اجرا می کند: Output { “data”: { “hello”: “Hello world!” } }
توجه: در صورت خراب شدن یا گیر نکردن سرور مجازی اکسپرس ، باید فرایند node که روی سرور مجازی اجرا می شود را به صورت دستی از بین ببرید. برای لغو همه این مراحل ، می توانید موارد زیر را اجرا کنید: ⦁ $ killall node ⦁ پس از آن می توانید با دستور زیر، سرور مجازی GraphQL مجدداً راه اندازی کنید: ⦁ $ npm start ⦁ در این مرحله شما اولین نسخه از سرور مجازی GraphQL را ایجاد کرده اید که هم اکنون در یک نقطه پایانی محلی اجرا می شود که به سرور مجازی شما قابل دسترسی است. در مرحله بعد ، resolver های خود را به پایگاه داده MongoDB وصل خواهید کرد. مرحله 3 – اتصال به بانک اطلاعاتی MongoDB با نظم گیری سرور مجازی GraphQL ، اکنون می توانید ارتباط را با پایگاه داده MongoDB که قبلاً پیکربندی کرده و پر از داده کرده اید ، تنظیم نمایید و یک طرح جدید ایجاد کنید که مطابق با این داده ها باشد. برای اینکه بتوانید از سرور مجازی GraphQL به MongoDB متصل شوید ، بسته JavaScript را برای MongoDB از npm نصب کنید: ⦁ $ sudo npm install –save mongodb ⦁ پس از نصب ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ سپس ، کد هایلایت شده زیر را درست بعد از متعلقات وارد شده به index.js اضافه کنید و مقادیر هایلایت شده را با جزئیات اتصال خود به پایگاه داده محلی MongoDB پر کنید. نام کاربری ، رمز عبور و نام پایگاه داده همان مواردی هستند که در مرحله اول این آموزش ایجاد کرده اید. index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }).then(client => client.db(‘database_name’)); …
این خطوط اتصال به پایگاه داده محلی MongoDB را به تابعی به نام context اضافه می کنند. این تابع context در دسترس هر resolver خواهد بود ، به همین دلیل شما از این گزینه برای تنظیم اتصالات بانک اطلاعاتی استفاده می کنید. در مرحله بعد ، در فایل index.js ، با وارد کردن خطوط هایلایت شده زیر ، تابع context را برای مقداردهی اولیه سرور مجازی GraphQL اضافه کنید: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
اکنون می توانید این تابع context را از طریق resolver های خود فراخوانی کنید و از این طریق متغیرهایی را از پایگاه داده MongoDB بخوانید. اگر به مرحله اول این آموزش بازگردید ، می توانید ببینید که کدام مقادیر در پایگاه داده وجود دارد. از اینجا ، یک طرح جدید GraphQL را تعریف کنید که با این ساختار داده مطابقت دارد. مقدار قبلی را برای طرحواره ثابت با خطوط هایلایت شده زیر بازنویسی کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `); …
نوع Query تغییر کرده است و اکنون مجموعه ای از نوع جدید Bio را برمی گرداند. این نوع جدید شامل چندین نوع از جمله دو نوع غیر اسکالر دیگر name و awards است ، به این معنی که این نوع ها با یک قالب از پیش تعریف شده مانند String یا Float مطابقت ندارند. برای اطلاعات بیشتر در مورد تعریف طرح های GraphQL می توانید به مستندات مربوط به GraphQL مراجعه کنید. همچنین ، از آنجا که resolver ها داده را از دیتابیس به شماتیک گره می زنند ، هنگام ایجاد تغییر در طرح ، کد را برای resolver ها به روز کنید. یک resolver جدید ایجاد کنید که به آن bios گفته می شود ، , برابر با Query است که می توانید در طرحواره و نام مجموعه در بانک اطلاعاتی پیدا کنید. توجه داشته باشید که در این حالت ، نام مجموعه در db.collection (“bios”) ، bios است ، اما اگر نام دیگری به مجموعه خود اختصاص داده باشید ، این نام تغییر خواهد کرد. خط هایلایت شده زیر را به index.js اضافه کنید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()) }; …
این تابع از تابع context استفاده می کند ، که می توانید برای بازیابی متغیرها از پایگاه داده MongoDB استفاده کنید. پس از انجام این تغییرات در کد ، index.js را ذخیره کنید و از آن خارج شوید. برای فعال سازی این تغییرات ، باید سرور مجازی GraphQL را مجدداً راه اندازی کنید. با استفاده از ترکیب صفحه کلید CTRL + C می توانید روند فعلی را متوقف کرده و با اجرای دستور زیر، سرور مجازی GraphQL را شروع کنید: ⦁ $ npm start ⦁ اکنون می توانید از طرحواره به روز شده استفاده کرده و داده هایی را که درون پایگاه داده است ، جستجو کنید. اگر به طرحواره نگاه کنید ، خواهید دید که Query برای bios نوع Bio را برمی گرداند. همچنین می تواند type name را برگرداند. برای بازگرداندن تمام اسامی اول و خانوادگی برای همه bioها در پایگاه داده ، درخواست زیر را در یک پنجره ترمینال جدید به سرور مجازی GraphQL بفرستید: ⦁ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ دوباره یک آبجکت JSON را که مطابق با ساختار طرح است برمی گرداند: Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}}]}}
به راحتی می توانید با گسترش پرس و جو با هر یک از انواع توصیف شده در نوع Bio ، متغیرهای بیشتری را از بایوس بازیابی کنید. همچنین ، می توانید با مشخص کردن یک id ، bio را بازیابی کنید. برای انجام این کار باید نوع دیگری به Query اضافه کنید و resolver ها را گسترش دهید. به این منظور ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده کد را اضافه کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio }
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })) }; …
فایل را ذخیره کنید و از آن خارج شوید. در ترمینالی که سرور مجازی GraphQL شما در حال اجراست ، CTRL + C را فشار دهید تا آن را از حالت اجرا متوقف کنید، سپس دستور زیر را برای راه اندازی مجدد آن اجرا کنید: ⦁ $ npm start ⦁ در پنجره ترمینال دیگر ، درخواست GraphQL زیر را اجرا کنید:
⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bio(id: 1) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁
ورودی برای bio که دارای شناسه برابر با 1 است را برمی گرداند: Output { “data”: { “bio”: { “name”: { “first”: “John”, “last”: “Backus” } } } }
توانایی جستجوی داده ها از یک پایگاه داده تنها ویژگی GraphQL نیست. همچنین می توانید داده ها را در دیتابیس تغییر دهید. برای انجام این کار ، index.js را باز کنید: ⦁ $ sudo nano index.js ⦁ در کنار نوع Query می توانید از نوع Mutation نیز استفاده کنید که به شما امکان می دهد پایگاه داده را جهش دهید. برای استفاده از این نوع ، آن را به طرح اضافه کنید و همچنین با وارد کردن این خطوط هایلایت شده ، انواع ورودی را ایجاد کنید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } …
این نوع ورودی ها تعریف می کنند که کدام متغیرها می توانند به عنوان ورودی استفاده شوند ، که می توانید به آنها در resolver ها دسترسی داشته باشید و از آنها برای درج یک سند جدید در بانک اطلاعاتی استفاده کنید. این کار را با اضافه کردن سطرهای زیر به index.js انجام دهید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘bios’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) }; …
درست همانطور که در مورد resolver ها برای جستارهای معمول گفته شد ، شما باید یک مقدار از resolver در index.js را برگردانید. در مورد جهش که نوع Bio در آن جهش یافته است ، مقدار bio جهش یافته را برمی گردانید. در این مرحله ، فایل index.js شما شامل سطرهای زیر خواهد بود: index.js iconst express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }) .then(client => client.db(‘GraphQL_Test’));
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `);
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) =>context().then(db => db.collection(‘Sample_Data’).find().toArray()), bio: (args, context) =>context().then(db => db.collection(‘Sample_Data’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘Sample_Data’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
ذخیره کنید و از index.js خارج شوید. برای بررسی اینکه جهش جدید شما در حال کار است ، با فشار دادن CTRL + c و اجرای npm در ترمینالی که سرور مجازی GraphQL شما را اجرا می کند ، سرور مجازی GraphQL را مجدداً راه اندازی کنید ، سپس یک بخش ترمینال دیگر را برای اجرای درخواست curl زیر باز کنید. درست مانند درخواست curl برای پرس و جو ، بدنه در پرچم –data به سرور مجازی GraphQL ارسال می شود. قسمت های هایلایت شده به دیتابیس اضافه می شود: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “mutation { addBio(input: { name: { first: \”test\”, last: \”user\” } }) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ نتیجه زیر را به همراه دارد ، بدین معنی که شما یک bio جدید را به بانک اطلاعاتی وارد کرده اید: Output { “data”: { “addBio”: { “name”: { “first”: “test”, “last”: “user” } } } }
در این مرحله ارتباط خود را با MongoDB و سرور مجازی GraphQL ایجاد کردید و با اجرای پرس و جوهای GraphQL می توانید داده ها را از این پایگاه داده بازیابی کنید و جهش دهید. در مرحله بعد ، این سرور مجازی GraphQL را برای دسترسی از راه دور قرار می دهید. مرحله 4 – اجازه دسترسی از راه دور با راه اندازی بانک اطلاعاتی و سرور مجازی GraphQL ، اکنون می توانید سرور مجازی GraphQL را پیکربندی کنید تا امکان دسترسی از راه دور فراهم شود. برای این کار از Nginx استفاده می کنید ، که در آموزش پیش نیاز نحوه نصب Nginx در اوبونتو 18.04 این کار را انجام دادید. این پیکربندی Nginx را می توان در فایل /etc/nginx/sites-available/example.com یافت ، جایی که example.com نام سرور مجازی ی است که در آموزش پیش نیاز اضافه کردید. این فایل را برای ویرایش باز کنید و نام دامنه خود را در example.com جایگزین کنید: ⦁ $ sudo nano /etc/nginx/sites-available/example.com ⦁ در این فایل می توانید یک بلوک سرور مجازی پیدا کنید که به پورت 80 گوش می دهد ، جایی که در حال حاضر مقداری برای server_name در آموزش پیش نیاز تنظیم کرده اید. در داخل این بلوک سرور مجازی ، مقدار root را تغییر دهید تا دایرکتوری باشد که در آن کد را برای سرور مجازی GraphQL ایجاد کرده و index.js را به عنوان فهرست اضافه می کنید. همچنین ، در بلوک لوکیشن ، یک proxy_pass تنظیم کنید تا بتوانید از IP سرور مجازی یا نام دامنه دلخواه خود برای مراجعه به سرور مجازی GraphQL استفاده کنید: /etc/nginx/sites-available/example.com server { listen 80; listen [::]:80;
root /project_name; index index.js;
server_name example.com;
location / { proxy_pass http://localhost:4000/graphql; } }
با اجرای دستور زیر مطمئن شوید که هیچ خطای نحوی Nginx در این فایل پیکربندی وجود ندارد: ⦁ $ sudo nginx -t ⦁ خروجی زیر را دریافت خواهید کرد: Output nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
هنگامی که هیچ خطایی برای فایل پیکربندی یافت نشد ، Nginx را مجدداً راه اندازی کنید: ⦁ $ sudo systemctl restart nginx ⦁ اکنون می توانید با اجرا و جایگزین کردن example.com توسط IP سرور مجازی یا نام دامنه شخصی خود به سرور مجازی GraphQL خود از هر تب بخش ترمینال دسترسی داشته باشید: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://example.com ⦁ همان آبجکت JSON به شیوه مرحله قبلی را برمی گرداند که شامل هر داده اضافی است که ممکن است با استفاده از یک جهش ، اضافه کرده باشید. Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}},{“name”:{“first”:”test”,”last”:”user”}}]}}
اکنون که سرور مجازی GraphQL را از راه دور در دسترس قرار داده اید ، هنگام بستن ترمینال یا راه اندازی مجدد سرور مجازی ، مطمئن شوید که سرور مجازی GraphQL شما متوقف نمیشود. به این ترتیب ، هر زمان که بخواهید درخواست کنید ، پایگاه داده MongoDB شما از طریق سرور مجازی GraphQL قابل دسترسی خواهد بود. برای انجام این کار ، از بسته npm forever استفاده کنید ، یک ابزار CLI که تضمین می کند اسکریپت های خط فرمان شما به طور مداوم اجرا میشوند یا در صورت بروز هرگونه خرابی مجدداً راه اندازی می شوند. Forever را با npm نصب کنید: ⦁ $ sudo npm install forever -g ⦁ پس از انجام کار نصب ، آن را به فایل pack.json اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “deploy”: “forever start –minUptime 2000 –spinSleepTime 5 index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, …
برای راه اندازی سرور مجازی GraphQL با forever فعال ، دستور زیر را اجرا کنید: ⦁ $ npm run deploy ⦁ با این کار فایل index.js حاوی سرور مجازی GraphQL با forever شروع می شود و اطمینان حاصل می کند که در صورت عدم موفقیت ، با حداقل زمان اجرای 2000 میلی ثانیه و 5 میلی ثانیه در هر راه اندازی مجدد کار خود را ادامه می دهید. سرور مجازی GraphQL اکنون به طور مداوم در پس زمینه اجرا می شود ، بنابراین دیگر وقتی می خواهید یک درخواست به سرور مجازی ارسال کنید ، دیگر نیازی به باز کردن تب جدید ندارید. اکنون یک سرور مجازی GraphQL ایجاد کرده اید که از MongoDB برای ذخیره داده استفاده می کند و برای دسترسی به سرور مجازی از راه دور تنظیم شده است. در مرحله بعدی می توانید playground را درGraphiQL را فعال کنید ، که این امکان را برای شما فراهم می کند که سرور مجازی GraphQL را بازرسی کنید. مرحله 5 – فعال کردن playground GraphiQL توانایی ارسال درخواستهای cURL به سرور مجازی GraphQL بسیار عالی است ، اما با داشتن یک رابط کاربری که بتواند بلافاصله درخواستهای GraphQL را اجرا کند ، به خصوص هنگام توسعه ، سریعتر خواهد بود. برای این کار می توانید از GraphiQL ، واسط پشتیبانی شده توسط بسته express-Graphql استفاده کنید. برای فعال کردن GraphiQL ، فایل index.js را ویرایش کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده زیر را اضافه کنید: index.js const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context, graphiql: true })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
فایل را ذخیره کنید و از آن خارج شوید. برای اینکه این تغییرات قابل مشاهده باشند ، با اجرای دستور زیر forever را متوقف شوید: ⦁ $ forever stop index.js ⦁ سپس ، دوباره forever را شروع کنید تا آخرین نسخه سرور مجازی QL در حال اجرا را ببینید ⦁ $ npm run deploy ⦁
یک مرورگر به آدرس http://example.com باز کنید ، و جایگزین example.com را با نام دامنه یا IP سرور مجازی خود جایگزین کنید. playground GraphiQL را خواهید دید که در آن می توانید درخواست های GraphQL را تایپ کنید.
در سمت چپ این playground می توانید پرس و جوهای GraphQL و جهش ها را تایپ کنید ، در حالی که خروجی در سمت راست playground نشان داده خواهد شد. برای آزمایش اینکه آیا کار می کند ، عبارت زیر را در سمت چپ تایپ کنید: query { bios { name { first last } } }
نتیجه مشابه در سمت راست playground ، دوباره با فرمت JSON را نشان میدهد:
اکنون می توانید درخواست های GraphQL را با استفاده از ترمینال و playground GraphiQL ارسال کنید. نتیجه در این آموزش پایگاه داده MongoDB را تنظیم کرده و داده ها را از این پایگاه داده با استفاده از GraphQL ، Node.js و Express برای سرور مجازی بازیابی می کنید و جهش میدهید. علاوه بر این ، Nginx را پیکربندی کردید تا امکان دسترسی از راه دور به این سرور مجازی را فراهم کند. نه تنها می توانید درخواست ها را به طور مستقیم به این سرور مجازی GraphQL ارسال کنید ، بلکه می توانید از GraphiQL به عنوان یک رابط GraphQL در مرورگر GraphQL نیز استفاده کنید. اگر می خواهید در مورد GraphQL اطلاعات کسب کنید ، می توانید فیلم ضبط شده از ارائه من در GraphQL را در NDC {London watch} مشاهده کنید یا برای آموزش در مورد GraphQL به وب سایت howtographql.com مراجعه کنید. برای مطالعه چگونگی تعامل GraphQL با سایر فناوری ها ، به آموزش نحوه تنطیم دستی سرور مجازی Prisma در ا��بونتو 18.04 نگاهی بیاندازید، و برای کسب اطلاعات بیشتر در مورد ساخت برنامه های کاربردی با MongoDB ، به نحوه ایجاد بلاگ با Nest.js ، MongoDB و Vue.js مراجعه کنید.
از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :
پارامترهای پیش فرض در جاوا اسکریپت  –  اجرای چندین نسخه PHP بر روی یک سرور Debian 10
نحوه راه اندازی یک پروژه React با برنامه React – نصب و ایمن سازی phpMyAdmin در اوبونتو 18
پیکربندی یک تایید اعتبار مجاز(CA) در CentOS 8  –  تنظیم برنامه Node.js برای تولید در CentOS 7
نصب MariaDB در اوبونتو 18.04  – ایمن کردن Apache با Let’s Encrypt در Debian 10
نحوه نصب Node.js در CentOS 8  –  بازنویسی URL را با mod_rewrite برای Apache در Debian 10
راه اندازی فایروال با استفاده از firewalld در CentOS 8  –  نصب وب سرور Apache در Debian 10
اضافه کردن و حذف کاربران در CentOS 8 –  نصب Apache Tomcat 9 در Debian 10
نصب و استفاده از PostgreSQL در CentOS 8  –  راه اندازی سرور اولیه با Debian 10
نصب MariaDB در CentOS 8  –  چگونه با JSX عناصر واقعی ایجاد کنیم
نصب و پیکربندی VNC در Debian 10  –  استفاده از سرور از راه دور Docker
نصب و ایمن سازی Grafana در اوبونتو 18  –  نحوه نصب Git در CentOS 8
نصب Git در Debian 10 –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرورهای
نحوه نصب Node.js در Debian 10  –  نصب وب سرور Apache در CentOS 7
نحوه نصب Webmin در Debian 10  –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرور
نصب وردپرس با بانک اطلاعاتی در اوبونتو  – ساخت و استقرار سرور GraphQL با Node.js و MongoDB
نصب پایتون 3 و تنظیم نویسی محلی macOS  – نصب و ایمن سازی phpMyAdmin با Nginx در سرور
نصب Nagios 4 و نظارت بر سرور اوبونتو 18  –  نصب Python 3 و تنظیم یک محیط برنامه نویسی
نحوه نصب R بر روی Debian 10  –  راه اندازی سرور Prisma روی اوبونتو 18.04
نصب و پیکربندی Laravel با LEMP در اوبونتو 18  –  نصب و پیکربندی pgAdmin 4 در Server Mode
نصب Python 3 و تنظیم برنامه نویسی CentOS 8 – نصب Jitsi Meet در Ubuntu 18.04
کلمات کلیدی خرید سرور
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
برچسب‌ها:
GraphQL
,
MongoDB
,
Node.js
0 notes
vpsgol12-blog · 4 years
Text
ساخت و استقرار سرور GraphQL با Node.js و MongoDB
در سال 2015 توسط فیس بوک به عنوان یک زبان پرس و جو برای API ها منتشر شد که پرس و جو و جهش داده ها از مجموعه داده های مختلف را آسان می کند. از یک نقطه پایانی واحد ، می توانید چندین منبع داده را با یک درخواست POST منفرد جستجو کنید و به جش واردارید. GraphQL برخی از نقص طراحی معمول در معماری REST API را برطرف می کند ، مانند موقعیت هایی که نقطه انتهایی اطلاعات بیشتری را نسبت به آنچه در واقع لازم دارید برمی گرداند. همچنین ، هنگام استفاده از API های REST ممکن است برای جمع آوری تمام اطلاعات مورد نیاز خود، ممکن است نیاز به ارسال درخواست به چند مورد از نقاط انتهایی REST داشته باشید – وضعیتی که به آن مشکل n + 1 گفته می شود. نمونه ای از این موارد وقتی پیش می آید که می خواهید اطلاعات کاربر را نشان دهید ، اما باید اطلاعاتی از قبیل جزئیات شخصی و آدرس ها را از نقاط مختلف جمع آوری کنید. این مشکلات برای GraphQL اعمال نمی شوند زیرا تنها یک نقطه پایانی دارد که می تواند داده ها را از چندین مجموعه بازگرداند. داده بازگشتی به پرس و جویی که به این نقطه پایانی ارسال شده بستگی دارد. در این پرس و جو ساختار داده ای را که می خواهید دریافت کنید ، از جمله هر مجموعه داده تو در تو را تعریف می کنید. علاوه بر یک پرس و جو ، می توانید از یک جهش برای تغییر داده ها روی یک سرور مجازی GraphQL و یک اشتراک نیز برای مشاهده تغییرات در داده استفاده کنید. برای کسب اطلاعات بیشتر در مورد GraphQL و مفاهیم آن ، می توانید به مطالب موجود در وب سایت رسمی مراجعه کنید. از آنجا که GraphQL یک زبان پرس و جو با انعطاف پذیری زیاد است ، به خصوص با داده های مبتنی بر مستندات مانند MongoDB ترکیب می شود. هر دو فناوری مبتنی بر طرحواره های سلسله مراتبی ، تایپ شده هستند و در جامعه جاوا اسکریپت محبوب میباشند. همچنین ، داده های MongoDB به عنوان اشیاء JSON ذخیره می شوند ، بنابراین هیچ تجزیه و تحلیل اضافی در سرور مجازی GraphQL لازم نیست. در این آموزش ، یک سرور مجازی GraphQL با Node.js ایجاد خواهید کرد و می توانید داده ها را از یک پایگاه داده MongoDB که در اوبونتو 18.04 در حال اجرا است ، پرس و جو کنید و جهش دهید. در پایان این آموزش ، شما می توانید با استفاده از یک نقطه پایانی واحد، هم با ارسال درخواست به سرور مجازی به طور مستقیم از طریق ترمینال و هم با استفاده از رابط پیش ساخته playground در GraphiQL به داده های موجود در بانک اطلاعاتی خود دسترسی داشته باشید. با استفاده از این playground می توانید محتویات سرور مجازی GraphQL را با ارسال پرس و جوها ، جهش ها و اشتراک ها کشف کنید. همچنین ، می توانید نمایش های بصری از طرح هایی را که برای این سرور مجازی تعریف شده است ، پیدا کنید. در پایان این آموزش ، شما از playground GraphiQL برای ارتباط سریع سرور مجازی GraphQL خود استفاده خواهید کرد:
پیش نیازها قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت: ⦁ سرور مجازی Ubuntu 18.04 که با پیروی از راهنمای تنظیم اولیه سرور مجازی Ubuntu 18.04 تنظیم شده باشد، شامل یک کاربر sudo غیر ریشه و فایروال نیز باشد. ⦁ نصب MongoDB و اجرای آن در اوبونتو 18.04 که می توانید با دنبال کردن آموزش نحوه نصب MongoDB در اوبونتو 18.04 آن را تنظیم کنید. ⦁ Nginx نصب شده ، همانطور که در نحوه نصب Nginx در Ubuntu 18.04 مشاهده می شود ، از جمله مرحله 4 – تنظیم بلوک های سرور مجازی. ⦁ برای دسترسی از راه دور به سرور مجازی GraphQL ، به یک نام دامنه کاملاً واجد شرایط (FQDN) و یک رکورد A نیاز دارید که به IP سرور مجازی شما اشاره کند. در صورت داشتن حساب vpsgol ، می توانید اطلاعات بیشتری در مورد این مورد با خواندن طریق مقدمه DNS اصطلاحات ، مؤلفه ها و مفاهیم ، یا اسناد دامنه و DNS کسب کنید. ⦁ آشنایی با JavaScript ، که می توانید از مجموعه نحوه کدنویسی در جاواسکریپت بیاموزید. مرحله 1 – تنظیم بانک اطلاعاتی MongoDB قبل از ایجاد سرور مجازی GraphQL ، اطمینان حاصل کنید که پایگاه داده شما درست پیکربندی شده باشد ، تأیید هویت آن فعال باشد و با داده های نمونه پر شده باشد. برای این کار باید از اعلان خط فرمان به سرور مجازی Ubuntu 18.04 که پایگاه داده MongoDB است متصل شوید. کلیه مراحل این آموزش در این سرور مجازی انجام خواهد شد. بعد از برقراری اتصال ، دستور زیر را اجرا کنید تا بررسی کنید که آیا MongoDB فعال و روی سرور مجازی شما فعال است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را در ترمینال خود مشاهده خواهید کرد ، نشان می دهد که بانک اطلاعاتی MongoDB به طور فعال در حال اجرا است: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
قبل از ایجاد دیتابیس که داده های نمونه را در آن ذخیره می کنید ، ابتدا باید یک کاربر ادمین ایجاد کنید ، زیرا کاربران عادی در یک پایگاه داده خاص قرار می گیرند. می توانید با اجرای دستور زیر که پوسته MongoDB را باز می کند ، این کار را انجام دهید: ⦁ $ mongo ⦁ با پوسته MongoDB دسترسی مستقیم به پایگاه داده MongoDB خواهید داشت و می توانید کاربران یا بانکهای اطلاعاتی و داده های پرس و جو ایجاد کنید. در داخل این پوسته ، دستور زیر را اجرا کنید که یک کاربر ادمین جدید را به MongoDB اضافه می کند. می توانید کلمات کلیدی هایلایت شده را با نام کاربری و رمز ورود خود جایگزین کنید ، اما فراموش نکنید که آنها را در جایی بنویسید. ⦁ mongo> use admin ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “admin_username”, ⦁ mongo> pwd: “admin_password”, ⦁ ⦁ mongo> roles: [{ role: “root”, db: “admin”}] ⦁ ⦁ mongo> })
خط اول دستور قبلی دیتابیس را با نام ادمین انتخاب می کند ، یعنی همان دیتابیسی که تمام نقش های ادمین در آن ذخیره می شود. با روش db.createUser () می توانید کاربر واقعی ایجاد کرده و نام کاربری ، رمزعبور و نقش های آن را تعریف کنید. اجرای این فرمان خروجی زیر را برمی گرداند: Output Successfully added user: { “user” : “admin_username”, “roles” : [ { “role” : “root”, “db” : “admin” } ] }
اکنون می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، دوباره وارد پوسته MongoDB شوید ، اما این بار با کاربر adminجدید: ⦁ $ mongo -u “admin_username” -p “admin_password” –authenticationDatabase “admin” ⦁ این دستور پوسته MongoDB را به عنوان یک کاربر خاص باز می کند، که در آن پرچم -u نام کاربری و پرچم -p رمز عبور آن کاربر را مشخص می کند. پرچم اضافی –authenticationDatabase مشخص می کند که می خواهید به عنوان ادمین وارد شوید. در مرحله بعد ، به یک بانک اطلاعاتی جدید می روید و سپس از روش db.createUser () برای ایجاد یک کاربر جدید دارای مجوز برای ایجاد تغییر در این پایگاه داده استفاده می کنید. بخش هایلایت شده را با اطلاعات مورد نظر خود جایگزین کنید ، حتما این مدارک را یادداشت کنید. دستور زیر را در پوسته MongoDB اجرا کنید: ⦁ mongo> use database_name ⦁ ⦁ mongo> db.createUser({ ⦁ ⦁ mongo> user: “username”, ⦁ ⦁ mongo> pwd: “password”, ⦁ ⦁ mongo> roles: [“readWrite”] ⦁ ⦁ mongo> })
با این کار خروجی زیر باز می گردد: Output Successfully added user: { “user” : “username”, “roles” : [“readWrite”] }
پس از ایجاد دیتابیس و کاربر ، این بانک اطلاعاتی را با داده های نمونه ای پر کنید که بعداً در این آموزش توسط سرور مجازی GraphQL می توانید جستجو کنید. برای این کار ، می توانید از نمونه مجموعه bios از وب سایت MongoDB استفاده کنید. با اجرای دستورات در قطعه کد زیر ، نسخه کوچکتری از این مجموعه داده bios را در پایگاه داده خود وارد می کنید. می توانید بخش های هایلایت شده را با اطلاعات شخصی خود جایگزین کنید ، اما برای اهداف این آموزش ، نام مجموعه را bios بگذارید: ⦁ mongo> db.bios.insertMany([ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : 1,
⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ ⦁ mongo> “last” : “Backus” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1924-12-03T05:00:00Z”), ⦁ mongo> “death” : ISODate(“2007-03-17T04:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Fortran”, ⦁ ⦁ mongo> “ALGOL”, ⦁ ⦁ mongo> “Backus-Naur Form”, ⦁ ⦁ mongo> “FP” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “W.W. McDowell Award”, ⦁ ⦁ mongo> “year” : 1967, ⦁ ⦁ mongo> “by” : “IEEE Computer Society” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1975, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1977, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Draper Prize”, ⦁ ⦁ mongo> “year” : 1993, ⦁ ⦁ mongo> “by” : “National Academy of Engineering” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “_id” : ObjectId(“51df07b094c6acd67e492f41”), ⦁ ⦁ mongo> “name” : { ⦁ ⦁ mongo> “first” : “John”, ⦁ mongo> “last” : “McCarthy” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> “birth” : ISODate(“1927-09-04T04:00:00Z”), ⦁ ⦁ mongo> “death” : ISODate(“2011-12-24T05:00:00Z”), ⦁ ⦁ mongo> “contribs” : [ ⦁ ⦁ mongo> “Lisp”, ⦁ ⦁ mongo> “Artificial Intelligence”, ⦁ ⦁ mongo> “ALGOL” ⦁ ⦁ mongo> ], ⦁ ⦁ mongo> “awards” : [ ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “Turing Award”, ⦁ ⦁ mongo> “year” : 1971, ⦁ ⦁ mongo> “by” : “ACM” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ mongo> “award” : “Kyoto Prize”, ⦁ ⦁ mongo> “year” : 1988, ⦁ ⦁ mongo> “by” : “Inamori Foundation” ⦁ ⦁ mongo> }, ⦁ ⦁ mongo> { ⦁ ⦁ mongo> “award” : “National Medal of Science”, ⦁ ⦁ mongo> “year” : 1990, ⦁ ⦁ mongo> “by” : “National Science Foundation” ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ] ⦁ ⦁ mongo> } ⦁ ⦁ mongo> ]);
این بلوک کد آرایه ای از آبجکت های مختلفی است که حاوی اطلاعات مربوط به دانشمندان موفق گذشته میباشد. پس از اجرای این دستورات برای وارد کردن این مجموعه به پایگاه داده خود ، پیام زیر را دریافت خواهید کرد که نشان می دهد داده ها اضافه شده اند: Output { “acknowledged” : true, “insertedIds” : [ 1, ObjectId(“51df07b094c6acd67e492f41”) ] }
پس از مشاهده پیام موفقیت ، می توانید پوسته MongoDB را با تایپ کردن exit ببندید. در مرحله بعد ، نصب MongoDB را پیکربندی کنید تا مجوز را فعال کنید و فقط کاربران معتبر بتوانند به داده ها دسترسی پیدا کنند. برای ویرایش پیکربندی نصب MongoDB ، فایل حاوی تنظیمات این نصب را باز کنید: ⦁ $ sudo nano /etc/mongodb.conf ⦁ برای فعال کردن مجوز ، خط هایلایت شده را در کد زیر را باطل کنید: /etc/mongodb.conf … # Turn on/off security. Off is currently the default #noauth = true auth = true …
برای فعال کردن این تغییرات ، MongoDB را مجدداً راه اندازی کنید: ⦁ $ Sudo systemctl restart mongodb ⦁ با اجرای دستور مطمئن شوید که پایگاه داده دوباره در حال اجرا است: ⦁ $ sudo systemctl status mongodb ⦁ خروجی زیر را مشاهده خواهید کرد: Output ● mongodb.service – An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-02-23 12:23:03 UTC; 1 months 13 days ago Docs: man:mongod(1) Main PID: 2388 (mongod) Tasks: 25 (limit: 1152) CGroup: /system.slice/mongodb.service └─2388 /usr/bin/mongod –unixSocketPrefix=/run/mongodb –config /etc/mongodb.conf
برای اطمینان از اینکه کاربر شما می تواند به دیتابیسی که ایجاد کرده اید وصل شود ، سعی کنید پوسته MongoDB را به عنوان یک کاربر معتبر با دستور زیر باز کنید: ⦁ $ mongo -u “username” -p “password” –authenticationDatabase “database_name” ⦁
از همان پرچم های قبلی استفاده میکند، فقط این بار –authenticationDatabase روی پایگاه داده ای که ایجاد کرده اید تنظیم میشود و با داده های نمونه پر میگردد. اکنون با موفقیت یک کاربر ادمین و کاربر دیگری را اضافه کرده اید که دسترسی به خواندن / نوشتن اطلاعات پایگاه داده با داده های نمونه را دارد. همچنین ، پایگاه داده دارای مجوزهای فعال است به این معنی که یک نام کاربری و رمزعبور برای دسترسی به آن نیاز دارید. در مرحله بعد سرور مجازی GraphQL را ایجاد خواهید کرد که بعداً در آموزش به این پایگاه داده وصل می شود. مرحله دوم – ایجاد سرور مجازی GraphQL با پیکربندی پایگاه داده و پر شدن با داده های نمونه ، زمان آن رسیده که یک سرور مجازی GraphQL ایجاد کنیم که بتواند این داده ها را پرس و جو کند و جهش دهد. برای این کار از Express و express-Graphql استفاده می کنید ، که هر دو در Node اجرا می شوند. Express یک چارچوب سبک برای ایجاد سریع سرور مجازی های HTTP Node.js است و Express-Graphql میان افزار را برای ایجاد سریع سرور مجازی های GraphQL امکان پذیر می کند. اولین قدم اطمینان از به روزرسانی دستگاه شما است: ⦁ $ sudo apt update ⦁ در مرحله بعد با اجرای دستورات زیر Node.js را روی سرور مجازی خود نصب کنید. به همراه Node.js همچنین npm را نصب خواهید کرد ، یک مدیر بسته برای JavaScript که روی Node.js. اجرا می شود. ⦁ $ sudo apt install nodejs npm ⦁ پس از طی مراحل نصب ، بررسی کنید که آیا نسخه Node.js که اخیراً نصب کرده اید v8.10.0 یا بالاتر است: ⦁ $ node -v ⦁ با این کار خروجی زیر باز می گردد: Output v8.10.0
برای شروع یک پروژه جدید JavaScript ، دستورات زیر را به عنوان کاربر sudo روی سرور مجازی اجرا کنید و کلمات کلیدی هایلایت شده را با نامی برای پروژه خود جایگزین کنید. ابتدا وارد دیرکتوری اصلی سرور مجازی خود شوید: ⦁ $ cd ⦁ پس از آنجا دایرکتوری جدیدی به همراه نام پروژه خود ایجاد کنید: ⦁ $ mkdir project_name ⦁ به این دیرکتوری بروید: ⦁ $ cd project_name ⦁ در آخر ، یک بسته npm جدید را با دستور زیر تنظیم کنید: ⦁ $ sudo npm init -y ⦁ بعد از اجرای npm init- پیام موفقیتی را دریافت خواهید کرد که فایل pack.json زیر ایجاد شده است: Output Wrote to /home/username/project_name/package.json:
{ “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” }
توجه: همچنین می توانید npm init را بدون پرچم -y اجرا کنید ، که پس از آن به سؤالات مختلفی برای تنظیم نام پروژه ، نویسنده ، و غیره پاسخ می دهید. می توانید جزئیات را وارد کنید یا فقط برای ادامه کلید Enter را بزنید.
اکنون که پروژه را آغاز کردید ، بسته های لازم برای راه اندازی سرور مجازی GraphQL را نصب کنید: ⦁ $ sudo npm install –save express express-graphql graphql ⦁ یک فایل جدید با نام index.js ایجاد کنید و متعاقباً با اجرای دستور زیر این فایل را باز کنید: ⦁ $ sudo nano index.js ⦁ در مرحله بعد ، بلوک کد زیر را در فایل تازه ایجاد شده برای تنظیم سرور مجازی GraphQL اضافه کنید: index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’);
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `);
// Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
این بلوک کد از چندین بخش تشکیل شده است که همه مهم هستند. ابتدا شمای داده هایی را که توسط GraphQL API برگردانده شده است شرح می دهید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { hello: String } `); … نوع Query تعریف می کند چه پرس و جوهایی میتوانند اجرا شوند و به چه فرمتی می توانند نتیجه را برگردانند. همانطور که مشاهده می کنید ، تنها پرس و جوی تعریف شده hello است که داده ها را با فرمت String برمی گرداند. در بخش بعدی ، resolvers تعیین می شوند ، جایی که داده ها با طرح هایی که می توانید پرس و جو کنند ، هماهنگ می شوند: index.js … // Provide resolver functions for your schema fields const resolvers = { hello: () => ‘Hello world!’ }; …
این resolverها مستقیماً با طرحواره ها مرتبط هستند و داده هایی را که با این طرح ها مطابقت دارد ، برمی گردانند. قسمت پایانی این بلاک کد سرور مجازی GraphQL را آغاز می کند ، نقطه پایانی API را با Express ایجاد می کند و پورتی را که انتهای GraphQL در آن در حال اجرا است توضیح می دهد: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
بعد از افزودن این خطوط ، ذخیره کنید و از index.js خارج شوید. در مرحله بعد ، برای اجرای سرور مجازی GraphQL ، باید فایل index.js را با Node.js. اجرا کنید. این کار به صورت دستی از خط فرمان قابل انجام است ، اما معمول است که فایل pack.json را تنظیم کنید تا این کار برای شما انجام شود. فایل pack.json را باز کنید: ⦁ $ sudo nano package.json ⦁ خط هایلایت شده زیر را به این فایل اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” } فایل را ذخیره کنید و از آن خارج شوید. برای راه اندازی سرور مجازی GraphQL ، دستور زیر را در ترمینال اجرا کنید: ⦁ $ npm start ⦁ پس از اجرای این برنامه ، اعلان ترمینال ناپدید می شود و پیامی برای تأیید سرور مجازی GraphQL ظاهر می شود: Output 🚀 Server ready at http://localhost:4000/graphql
اگر اکنون بخش ترمینال دیگری را باز کرده اید ، می توانید با اجرای دستور زیر آزمایش کنید که آیا سرور مجازی GraphQL در حال اجرا است. این کار درخواست POST curlرا با بدنه JSON پس از پرچم –data که شامل پرس و جوی GraphQL شما به نقطه انتهایی محلی است ارسال می کند: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ hello }” }’ http://localhost:4000/graphql ⦁ با این کار پرس و جو همانطور که در شمای GraphQL در کد شما شرح داده شده است اجرا می شود و داده ها را با فرمت JSON قابل پیش بینی که یکسان با داده های برگشت یافته در resolver هاست، اجرا می کند: Output { “data”: { “hello”: “Hello world!” } }
توجه: در صورت خراب شدن یا گیر نکردن سرور مجازی اکسپرس ، باید فرایند node که روی سرور مجازی اجرا می شود را به صورت دستی از بین ببرید. برای لغو همه این مراحل ، می توانید موارد زیر را اجرا کنید: ⦁ $ killall node ⦁ پس از آن می توانید با دستور زیر، سرور مجازی GraphQL مجدداً راه اندازی کنید: ⦁ $ npm start ⦁ در این مرحله شما اولین نسخه از سرور مجازی GraphQL را ایجاد کرده اید که هم اکنون در یک نقطه پایانی محلی اجرا می شود که به سرور مجازی شما قابل دسترسی است. در مرحله بعد ، resolver های خود را به پایگاه داده MongoDB وصل خواهید کرد. مرحله 3 – اتصال به بانک اطلاعاتی MongoDB با نظم گیری سرور مجازی GraphQL ، اکنون می توانید ارتباط را با پایگاه داده MongoDB که قبلاً پیکربندی کرده و پر از داده کرده اید ، تنظیم نمایید و یک طرح جدید ایجاد کنید که مطابق با این داده ها باشد. برای اینکه بتوانید از سرور مجازی GraphQL به MongoDB متصل شوید ، بسته JavaScript را برای MongoDB از npm نصب کنید: ⦁ $ sudo npm install –save mongodb ⦁ پس از نصب ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ سپس ، کد هایلایت شده زیر را درست بعد از متعلقات وارد شده به index.js اضافه کنید و مقادیر هایلایت شده را با جزئیات اتصال خود به پایگاه داده محلی MongoDB پر کنید. نام کاربری ، رمز عبور و نام پایگاه داده همان مواردی هستند که در مرحله اول این آموزش ایجاد کرده اید. index.js const express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }).then(client => client.db(‘database_name’)); …
این خطوط اتصال به پایگاه داده محلی MongoDB را به تابعی به نام context اضافه می کنند. این تابع context در دسترس هر resolver خواهد بود ، به همین دلیل شما از این گزینه برای تنظیم اتصالات بانک اطلاعاتی استفاده می کنید. در مرحله بعد ، در فایل index.js ، با وارد کردن خطوط هایلایت شده زیر ، تابع context را برای مقداردهی اولیه سرور مجازی GraphQL اضافه کنید: index.js … const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
اکنون می توانید این تابع context را از طریق resolver های خود فراخوانی کنید و از این طریق متغیرهایی را از پایگاه داده MongoDB بخوانید. اگر به مرحله اول این آموزش بازگردید ، می توانید ببینید که کدام مقادیر در پایگاه داده وجود دارد. از اینجا ، یک طرح جدید GraphQL را تعریف کنید که با این ساختار داده مطابقت دارد. مقدار قبلی را برای طرحواره ثابت با خطوط هایلایت شده زیر بازنویسی کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `); …
نوع Query تغییر کرده است و اکنون مجموعه ای از نوع جدید Bio را برمی گرداند. این نوع جدید شامل چندین نوع از جمله دو نوع غیر اسکالر دیگر name و awards است ، به این معنی که این نوع ها با یک قالب از پیش تعریف شده مانند String یا Float مطابقت ندارند. برای اطلاعات بیشتر در مورد تعریف طرح های GraphQL می توانید به مستندات مربوط به GraphQL مراجعه کنید. همچنین ، از آنجا که resolver ها داده را از دیتابیس به شماتیک گره می زنند ، هنگام ایجاد تغییر در طرح ، کد را برای resolver ها به روز کنید. یک resolver جدید ایجاد کنید که به آن bios گفته می شود ، , برابر با Query است که می توانید در طرحواره و نام مجموعه در بانک اطلاعاتی پیدا کنید. توجه داشته باشید که در این حالت ، نام مجموعه در db.collection (“bios”) ، bios است ، اما اگر نام دیگری به مجموعه خود اختصاص داده باشید ، این نام تغییر خواهد کرد. خط هایلایت شده زیر را به index.js اضافه کنید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()) }; …
این تابع از تابع context استفاده می کند ، که می توانید برای بازیابی متغیرها از پایگاه داده MongoDB استفاده کنید. پس از انجام این تغییرات در کد ، index.js را ذخیره کنید و از آن خارج شوید. برای فعال سازی این تغییرات ، باید سرور مجازی GraphQL را مجدداً راه اندازی کنید. با استفاده از ترکیب صفحه کلید CTRL + C می توانید روند فعلی را متوقف کرده و با اجرای دستور زیر، سرور مجازی GraphQL را شروع کنید: ⦁ $ npm start ⦁ اکنون می توانید از طرحواره به روز شده استفاده کرده و داده هایی را که درون پایگاه داده است ، جستجو کنید. اگر به طرحواره نگاه کنید ، خواهید دید که Query برای bios نوع Bio را برمی گرداند. همچنین می تواند type name را برگرداند. برای بازگرداندن تمام اسامی اول و خانوادگی برای همه bioها در پایگاه داده ، درخواست زیر را در یک پنجره ترمینال جدید به سرور مجازی GraphQL بفرستید: ⦁ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ دوباره یک آبجکت JSON را که مطابق با ساختار طرح است برمی گرداند: Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}}]}}
به راحتی می توانید با گسترش پرس و جو با هر یک از انواع توصیف شده در نوع Bio ، متغیرهای بیشتری را از بایوس بازیابی کنید. همچنین ، می توانید با مشخص کردن یک id ، bio را بازیابی کنید. برای انجام این کار باید نوع دیگری به Query اضافه کنید و resolver ها را گسترش دهید. به این منظور ، index.js را در ویرایشگر متن خود باز کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده کد را اضافه کنید: index.js … // Construct a schema, using GrahQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio }
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })) }; …
فایل را ذخیره کنید و از آن خارج شوید. در ترمینالی که سرور مجازی GraphQL شما در حال اجراست ، CTRL + C را فشار دهید تا آن را از حالت اجرا متوقف کنید، سپس دستور زیر را برای راه اندازی مجدد آن اجرا کنید: ⦁ $ npm start ⦁ در پنجره ترمینال دیگر ، درخواست GraphQL زیر را اجرا کنید:
⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bio(id: 1) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁
ورودی برای bio که دارای شناسه برابر با 1 است را برمی گرداند: Output { “data”: { “bio”: { “name”: { “first”: “John”, “last”: “Backus” } } } }
توانایی جستجوی داده ها از یک پایگاه داده تنها ویژگی GraphQL نیست. همچنین می توانید داده ها را در دیتابیس تغییر دهید. برای انجام این کار ، index.js را باز کنید: ⦁ $ sudo nano index.js ⦁ در کنار نوع Query می توانید از نوع Mutation نیز استفاده کنید که به شما امکان می دهد پایگاه داده را جهش دهید. برای استفاده از این نوع ، آن را به طرح اضافه کنید و همچنین با وارد کردن این خطوط هایلایت شده ، انواع ورودی را ایجاد کنید: index.js … // Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } …
این نوع ورودی ها تعریف می کنند که کدام متغیرها می توانند به عنوان ورودی استفاده شوند ، که می توانید به آنها در resolver ها دسترسی داشته باشید و از آنها برای درج یک سند جدید در بانک اطلاعاتی استفاده کنید. این کار را با اضافه کردن سطرهای زیر به index.js انجام دهید: index.js … // Provide resolver functions for your schema fields const resolvers = { bios: (args, context) => context().then(db => db.collection(‘bios’).find().toArray()), bio: (args, context) => context().then(db => db.collection(‘bios’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘bios’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) }; …
درست همانطور که در مورد resolver ها برای جستارهای معمول گفته شد ، شما باید یک مقدار از resolver در index.js را برگردانید. در مورد جهش که نوع Bio در آن جهش یافته است ، مقدار bio جهش یافته را برمی گردانید. در این مرحله ، فایل index.js شما شامل سطرهای زیر خواهد بود: index.js iconst express = require(‘express’); const graphqlHTTP = require(‘express-graphql’); const { buildSchema } = require(‘graphql’); const { MongoClient } = require(‘mongodb’);
const context = () => MongoClient.connect(‘mongodb://username:password@localhost:27017/database_name’, { useNewUrlParser: true }) .then(client => client.db(‘GraphQL_Test’));
// Construct a schema, using GraphQL schema language const schema = buildSchema(` type Query { bios: [Bio] bio(id: Int): Bio } type Mutation { addBio(input: BioInput) : Bio } input BioInput { name: NameInput title: String birth: String death: String } input NameInput { first: String last: String } type Bio { name: Name, title: String, birth: String, death: String, awards: [Award] } type Name { first: String, last: String }, type Award { award: String, year: Float, by: String } `);
// Provide resolver functions for your schema fields const resolvers = { bios: (args, context) =>context().then(db => db.collection(‘Sample_Data’).find().toArray()), bio: (args, context) =>context().then(db => db.collection(‘Sample_Data’).findOne({ _id: args.id })), addBio: (args, context) => context().then(db => db.collection(‘Sample_Data’).insertOne({ name: args.input.name, title: args.input.title, death: args.input.death, birth: args.input.birth})).then(response => response.ops[0]) };
const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
ذخیره کنید و از index.js خارج شوید. برای بررسی اینکه جهش جدید شما در حال کار است ، با فشار دادن CTRL + c و اجرای npm در ترمینالی که سرور مجازی GraphQL شما را اجرا می کند ، سرور مجازی GraphQL را مجدداً راه اندازی کنید ، سپس یک بخش ترمینال دیگر را برای اجرای درخواست curl زیر باز کنید. درست مانند درخواست curl برای پرس و جو ، بدنه در پرچم –data به سرور مجازی GraphQL ارسال می شود. قسمت های هایلایت شده به دیتابیس اضافه می شود: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “mutation { addBio(input: { name: { first: \”test\”, last: \”user\” } }) { name { first, last } } }” }’ http://localhost:4000/graphql ⦁ نتیجه زیر را به همراه دارد ، بدین معنی که شما یک bio جدید را به بانک اطلاعاتی وارد کرده اید: Output { “data”: { “addBio”: { “name”: { “first”: “test”, “last”: “user” } } } }
در این مرحله ارتباط خود را با MongoDB و سرور مجازی GraphQL ایجاد کردید و با اجرای پرس و جوهای GraphQL می توانید داده ها را از این پایگاه داده بازیابی کنید و جهش دهید. در مرحله بعد ، این سرور مجازی GraphQL را برای دسترسی از راه دور قرار می دهید. مرحله 4 – اجازه دسترسی از راه دور با راه اندازی بانک اطلاعاتی و سرور مجازی GraphQL ، اکنون می توانید سرور مجازی GraphQL را پیکربندی کنید تا امکان دسترسی از راه دور فراهم شود. برای این کار از Nginx استفاده می کنید ، که در آموزش پیش نیاز نحوه نصب Nginx در اوبونتو 18.04 این کار را انجام دادید. این پیکربندی Nginx را می توان در فایل /etc/nginx/sites-available/example.com یافت ، جایی که example.com نام سرور مجازی ی است که در آموزش پیش نیاز اضافه کردید. این فایل را برای ویرایش باز کنید و نام دامنه خود را در example.com جایگزین کنید: ⦁ $ sudo nano /etc/nginx/sites-available/example.com ⦁ در این فایل می توانید یک بلوک سرور مجازی پیدا کنید که به پورت 80 گوش می دهد ، جایی که در حال حاضر مقداری برای server_name در آموزش پیش نیاز تنظیم کرده اید. در داخل این بلوک سرور مجازی ، مقدار root را تغییر دهید تا دایرکتوری باشد که در آن کد را برای سرور مجازی GraphQL ایجاد کرده و index.js را به عنوان فهرست اضافه می کنید. همچنین ، در بلوک لوکیشن ، یک proxy_pass تنظیم کنید تا بتوانید از IP سرور مجازی یا نام دامنه دلخواه خود برای مراجعه به سرور مجازی GraphQL استفاده کنید: /etc/nginx/sites-available/example.com server { listen 80; listen [::]:80;
root /project_name; index index.js;
server_name example.com;
location / { proxy_pass http://localhost:4000/graphql; } }
با اجرای دستور زیر مطمئن شوید که هیچ خطای نحوی Nginx در این فایل پیکربندی وجود ندارد: ⦁ $ sudo nginx -t ⦁ خروجی زیر را دریافت خواهید کرد: Output nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
هنگامی که هیچ خطایی برای فایل پیکربندی یافت نشد ، Nginx را مجدداً راه اندازی کنید: ⦁ $ sudo systemctl restart nginx ⦁ اکنون می توانید با اجرا و جایگزین کردن example.com توسط IP سرور مجازی یا نام دامنه شخصی خود به سرور مجازی GraphQL خود از هر تب بخش ترمینال دسترسی داشته باشید: ⦁ $ curl -X POST -H “Content-Type: application/json” –data ‘{ “query”: “{ bios { name { first, last } } }” }’ http://example.com ⦁ همان آبجکت JSON به شیوه مرحله قبلی را برمی گرداند که شامل هر داده اضافی است که ممکن است با استفاده از یک جهش ، اضافه کرده باشید. Output {“data”:{“bios”:[{“name”:{“first”:”John”,”last”:”Backus”}},{“name”:{“first”:”John”,”last”:”McCarthy”}},{“name”:{“first”:”test”,”last”:”user”}}]}}
اکنون که سرور مجازی GraphQL را از راه دور در دسترس قرار داده اید ، هنگام بستن ترمینال یا راه اندازی مجدد سرور مجازی ، مطمئن شوید که سرور مجازی GraphQL شما متوقف نمیشود. به این ترتیب ، هر زمان که بخواهید درخواست کنید ، پایگاه داده MongoDB شما از طریق سرور مجازی GraphQL قابل دسترسی خواهد بود. برای انجام این کار ، از بسته npm forever استفاده کنید ، یک ابزار CLI که تضمین می کند اسکریپت های خط فرمان شما به طور مداوم اجرا میشوند یا در صورت بروز هرگونه خرابی مجدداً راه اندازی می شوند. Forever را با npm نصب کنید: ⦁ $ sudo npm install forever -g ⦁ پس از انجام کار نصب ، آن را به فایل pack.json اضافه کنید: package.json { “name”: “project_name”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “node index.js”, “deploy”: “forever start –minUptime 2000 –spinSleepTime 5 index.js”, “test”: “echo \”Error: no test specified\” && exit 1″ }, …
برای راه اندازی سرور مجازی GraphQL با forever فعال ، دستور زیر را اجرا کنید: ⦁ $ npm run deploy ⦁ با این کار فایل index.js حاوی سرور مجازی GraphQL با forever شروع می شود و اطمینان حاصل می کند که در صورت عدم موفقیت ، با حداقل زمان اجرای 2000 میلی ثانیه و 5 میلی ثانیه در هر راه اندازی مجدد کار خود را ادامه می دهید. سرور مجازی GraphQL اکنون به طور مداوم در پس زمینه اجرا می شود ، بنابراین دیگر وقتی می خواهید یک درخواست به سرور مجازی ارسال کنید ، دیگر نیازی به باز کردن تب جدید ندارید. اکنون یک سرور مجازی GraphQL ایجاد کرده اید که از MongoDB برای ذخیره داده استفاده می کند و برای دسترسی به سرور مجازی از راه دور تنظیم شده است. در مرحله بعدی می توانید playground را درGraphiQL را فعال کنید ، که این امکان را برای شما فراهم می کند که سرور مجازی GraphQL را بازرسی کنید. مرحله 5 – فعال کردن playground GraphiQL توانایی ارسال درخواستهای cURL به سرور مجازی GraphQL بسیار عالی است ، اما با داشتن یک رابط کاربری که بتواند بلافاصله درخواستهای GraphQL را اجرا کند ، به خصوص هنگام توسعه ، سریعتر خواهد بود. برای این کار می توانید از GraphiQL ، واسط پشتیبانی شده توسط بسته express-Graphql استفاده کنید. برای فعال کردن GraphiQL ، فایل index.js را ویرایش کنید: ⦁ $ sudo nano index.js ⦁ خطوط هایلایت شده زیر را اضافه کنید: index.js const app = express(); app.use(‘/graphql’, graphqlHTTP({ schema, rootValue: resolvers, context, graphiql: true })); app.listen(4000);
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
فایل را ذخیره کنید و از آن خارج شوید. برای اینکه این تغییرات قابل مشاهده باشند ، با اجرای دستور زیر forever را متوقف شوید: ⦁ $ forever stop index.js ⦁ سپس ، دوباره forever را شروع کنید تا آخرین نسخه سرور مجازی QL در حال اجرا را ببینید ⦁ $ npm run deploy ⦁
یک مرورگر به آدرس http://example.com باز کنید ، و جایگزین example.com را با نام دامنه یا IP سرور مجازی خود جایگزین کنید. playground GraphiQL را خواهید دید که در آن می توانید درخواست های GraphQL را تایپ کنید.
در سمت چپ این playground می توانید پرس و جوهای GraphQL و جهش ها را تایپ کنید ، در حالی که خروجی در سمت راست playground نشان داده خواهد شد. برای آزمایش اینکه آیا کار می کند ، عبارت زیر را در سمت چپ تایپ کنید: query { bios { name { first last } } }
نتیجه مشابه در سمت راست playground ، دوباره با فرمت JSON را نشان میدهد:
اکنون می توانید درخواست های GraphQL را با استفاده از ترمینال و playground GraphiQL ارسال کنید. نتیجه در این آموزش پایگاه داده MongoDB را تنظیم کرده و داده ها را از این پایگاه داده با استفاده از GraphQL ، Node.js و Express برای سرور مجازی بازیابی می کنید و جهش میدهید. علاوه بر این ، Nginx را پیکربندی کردید تا امکان دسترسی از راه دور به این سرور مجازی را فراهم کند. نه تنها می توانید درخواست ها را به طور مستقیم به این سرور مجازی GraphQL ارسال کنید ، بلکه می توانید از GraphiQL به عنوان یک رابط GraphQL در مرورگر GraphQL نیز استفاده کنید. اگر می خواهید در مورد GraphQL اطلاعات کسب کنید ، می توانید فیلم ضبط شده از ارائه من در GraphQL را در NDC {London watch} مشاهده کنید یا برای آموزش در مورد GraphQL به وب سایت howtographql.com مراجعه کنید. برای مطالعه چگونگی تعامل GraphQL با سایر فناوری ها ، به آموزش نحوه تنطیم دستی سرور مجازی Prisma در اوبونتو 18.04 نگاهی بیاندازید، و برای کسب اطلاعات بیشتر در مورد ساخت برنامه های کاربردی با MongoDB ، به نحوه ایجاد بلاگ با Nest.js ، MongoDB و Vue.js مراجعه کنید.
از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :
پارامترهای پیش فرض در جاوا اسکریپت  –  اجرای چندین نسخه PHP بر روی یک سرور Debian 10
نحوه راه اندازی یک پروژه React با برنامه React – نصب و ایمن سازی phpMyAdmin در اوبونتو 18
پیکربندی یک تایید اعتبار مجاز(CA) در CentOS 8  –  تنظیم برنامه Node.js برای تولید در CentOS 7
نصب MariaDB در اوبونتو 18.04  – ایمن کردن Apache با Let’s Encrypt در Debian 10
نحوه نصب Node.js در CentOS 8  –  بازنویسی URL را با mod_rewrite برای Apache در Debian 10
راه اندازی فایروال با استفاده از firewalld در CentOS 8  –  نصب وب سرور Apache در Debian 10
اضافه کردن و حذف کاربران در CentOS 8 –  نصب Apache Tomcat 9 در Debian 10
نصب و استفاده از PostgreSQL در CentOS 8  –  راه اندازی سرور اولیه با Debian 10
نصب MariaDB در CentOS 8  –  چگونه با JSX عناصر واقعی ایجاد کنیم
نصب و پیکربندی VNC در Debian 10  –  استفاده از سرور از راه دور Docker
نصب و ایمن سازی Grafana در اوبونتو 18  –  نحوه نصب Git در CentOS 8
نصب Git در Debian 10 –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرورهای
نحوه نصب Node.js در Debian 10  –  نصب وب سرور Apache در CentOS 7
نحوه نصب Webmin در Debian 10  –  نصب و پیکربندی Zabbix برای ردیابی ایمن سرور
نصب وردپرس با بانک اطلاعاتی در اوبونتو  – ساخت و استقرار سرور GraphQL با Node.js و MongoDB
نصب پایتون 3 و تنظیم نویسی محلی macOS  – نصب و ایمن سازی phpMyAdmin با Nginx در سرور
نصب Nagios 4 و نظارت بر سرور اوبونتو 18  –  نصب Python 3 و تنظیم یک محیط برنامه نویسی
نحوه نصب R بر روی Debian 10  –  راه اندازی سرور Prisma روی اوبونتو 18.04
نصب و پیکربندی Laravel با LEMP در اوبونتو 18  –  نصب و پیکربندی pgAdmin 4 در Server Mode
نصب Python 3 و تنظیم برنامه نویسی CentOS 8 – نصب Jitsi Meet در Ubuntu 18.04
کلمات کلیدی خرید سرور
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
برچسب‌ها:
GraphQL
,
MongoDB
,
Node.js
0 notes