forum.ge
reklama
FORUM.GE წესები  · დახმარება  · ძებნა  · წევრები  · კალენდარი  · ფოსტა  · ჩატი
Pages: (6) [1] 2 3 ... ბოლო »  ( გადავიდეთ პირველ წაუკითხავ წერილზე ) გამოხმაურება · ახალი თემა · ახალი გამოკითხვა

> ნუბური შეკითხვები nodejs - ში
Svani91
Super Crazy Member


******
ჯგუფი: Moderators
წერილები: 7304
წევრი No.: 73460
რეგისტრ.: 4-November 08

გამოგზავნილია: 13 Nov 2016, 06:36  #49256984      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
ნუბური შეკითხვები nodejs - ში

მე დავიწყებ

დაახლოებით 1 თვეა ვარჩევ და მივყვები.
ეხლა მაქვს დასაწერი ვებ აპლიკაცია, რომელიც არც მეჩქარება და საკმაოდ მარტივი crud აპპი უნდა გამოვიდეს საბოლოო ჯამში

გადავწყვიტე გამოვიყენო node express - თან ერთად და ცოტა გამოცდილებაც მივიღო

ბევრი კითხვები მექნება

1) რომელ view engine - ს მირჩევთ? მე 2 ვნახე ჯერ jade(pug) და ejs (ეს მომეწონა, ძველ asp - ს გავს და ახლოს ვარ უფრო)
2) json - თან სამუშაოდ რომელ ბიბლიოთეკას მირჩევთ?
3) რომელი nosql ბაზა გამოვიყენო - თავის ბიბლიოთეკიანად მირჩიეთ
4) amazon web services - თან სამუშაოდაც დამჭირდება ბიბლიოთეკა
5) ყველაზე მთავარი - ჰოსტინგი. heroku ვნახე ჯერ-ჯერობით მე მხოლოდ. სხვა რას მირჩევთ?


უნდა დავტაგო, თუ არ მიწყენს

web_nts

This post has been edited by Svani91 on 13 Nov 2016, 06:38
web_nts
EVERYBODY LIES


*******
ჯგუფი: Members
წერილები: 11772
წევრი No.: 11840
რეგისტრ.: 28-July 05

გამოგზავნილია: 13 Nov 2016, 13:46  #49258110      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
Svani91
QUOTE
1) რომელ view engine - ს მირჩევთ? მე 2 ვნახე ჯერ jade(pug) და ejs (ეს მომეწონა, ძველ asp - ს გავს და ახლოს ვარ უფრო)
2) json - თან სამუშაოდ რომელ ბიბლიოთეკას მირჩევთ?
3) რომელი nosql ბაზა გამოვიყენო - თავის ბიბლიოთეკიანად მირჩიეთ
4) amazon web services - თან სამუშაოდაც დამჭირდება ბიბლიოთეკა
5) ყველაზე მთავარი - ჰოსტინგი. heroku ვნახე ჯერ-ჯერობით მე მხოლოდ. სხვა რას მირჩევთ?

1. Mustache-ს ვხმარობ მე, Jadeს ერ მოვეჩვიე ვერაფრით.
2. ვერ მივხვდი რას გულისხმობ spy.gif მაგალითი მოიყვანე აბა რა შემთხვევაში შეიძლება ბიბლიოთეკა დაგჭირდეს ნატივი ფუნქციონალობის გარდა.
3. MongoDB თუ იმენა ბაზა გინდა ნაგრამ ისე Elasticsearch-იც ნახე და დაამუღამე. ტექსტური ძებნისთვის საუკეთედოა.
4. ოფიციალური AWS SDK არსებობს და სხვა ენებთან შედარებით მოხერხებულია უფრო https://aws.amazon.com/documentation/sdk-for-java[ertad]script/
დასაყენებლად გაუშვი npm install aws-sdk
5. ნებისმიერი VPS ცენტოსით ან უბუნტუთი. მე ცენტოსზე ვარ მიჩვეული მაგრამ უბუნტუც კარგია. სასწავლად ვინდოუსზეც უპრობლემოდ მუშაობს.

პროდუქციაში თუ ჩაუშვებ კოდს, აუცილებლად nginx-ის სერვერის უკან იყოს ნოდი. პირდაპირ ნოდის სერვერს არ ენდო ინტერნეტში.

მერე დავწერ უფრო დეტალურად ინსტალაციაზე და სერვერის კონფიგურაციაზე თუ გინდათ.


--------------------
სპლიყვი გამოუშვით ფარჩაკებო!
Svani91
Super Crazy Member


******
ჯგუფი: Moderators
წერილები: 7304
წევრი No.: 73460
რეგისტრ.: 4-November 08

გამოგზავნილია: 13 Nov 2016, 14:48  #49258506      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
web_nts

იდეაში ვაპირებდი მეკითხა/მეწერა json ფაილებში, მონგო მეზარებოდა
მაგრამ ეხლა Elasticsearch - ს გადავხედავ

გვინდა კი, დაწერე სერვერის დაკონფიგებაზე up.gif
web_nts
EVERYBODY LIES


*******
ჯგუფი: Members
წერილები: 11772
წევრი No.: 11840
რეგისტრ.: 28-July 05

გამოგზავნილია: 13 Nov 2016, 19:09  #49260027      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
Svani91
თუ ფაილებად გინდა მაშინ სტრინგად გადააქცევ ობიექტს JSON.stringify(myObject) და შეინახავ ფაილად. წაკითხვითაც ამ ფაილს წაიკითხავ, ობიექტად გადააქცევ უკან სტრინგიდან JSON.parse(stringFromFile) და ეგაა.

ფაილების წასაკითხად/ჩასაწერად გამოიყენებ fs-ს, ნოდის სტანდარტულ ბიბლიოთეკას. ანუ არანაირი გარე მოდული არ გჭირდება. https://nodejs.org/api/fs.html

საერთოდ მოდულები რაც შეიძლება იშვიათად უნდა გამოიყენო და ისიც მხოლოდ კომპლექსური პრობლემებისთვის. მე რაც დავწერე იგივეს ძალიან ბევრი მზა მოდული აკეთებს მაგრამ რეალურად ეს ყველაფერი არის სულ 5 ხაზი. რატომ უნდა იყო დამოკიდებული ვიღაც ტიპის დაწერილ მოდულზე როდესაც შენ თვითონ შეგიძლია იგივეს ან უფრო უკეთესის დაწერა? სხვა საკითხია მოდულები რომლებიც ეხება კრიპტოგრაფიას და სხვა კომპლექსურ მოდულებს. ასეთების დაწერაზე შეიძლება თვეები დაკარგო და ისიც დარწმუნებულო არ იყო ვარგა თუ არა.

მარტივი ფუნქიონალობისთვის არასაჭირო მოდულების გამოყენებამ რა შეიძლება გამოიწვიოს აქ შეგიძლია ნახო http://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/ ერთმა გაბრაზებულმა რამოდენიმე ხაზიანი მოდულის ავტორმა, ლამის ნახევარი ინტერნეტი იმსხვერპლა smile.gif

სერვერის კონფიგურაციის მანუალს სახლიდან დავწერ, ტელეფონით ვარ ეხლა.

This post has been edited by web_nts on 13 Nov 2016, 19:13
web_nts
EVERYBODY LIES


*******
ჯგუფი: Members
წერილები: 11772
წევრი No.: 11840
რეგისტრ.: 28-July 05

გამოგზავნილია: 14 Nov 2016, 01:40  #49263142      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
* გაფრთხილება:

ეს პოსტი არის განკუთვნილი მათთვის ვინც იცის ელემენტალურ დონეზე ლინუქსთან და ვირტუალურ მანქანებთან მუშაობა! დამწყებისთვის შეიძლება ძალიან საშიში შესახედავი ჩანდეს მაგრამ ასე არ არის, ნოდის სასწავლად ამ ყველაფრის გაკეთება არ გჭირდებათ, ვინდოუსზეც უმარტივესად გადმოწერთ ნოდს ( https://nodejs.org/en/download/ ) და დააყენებთ უმარტივესად, ასე რომ დამწყებები ქვედა პოსტმა არ შეგაშინოთ smile.gif



პროდუქციისთვის მზა ცენტოსის კონფიგურირება NodeJS-ით და NGINX-ით:



პირველ რიგში თუ უკვე მზა VPS გაქვთ რომელსაც ცენტოსით ქირაობთ, მაშინ პირდარ კონფიგურაციაზე შეგიძლიათ გადახვიდეთ, თუ არადა მაშინ შეხვალთ აქ -> https://www.centos.org/download/ და გადმოწერთ "Minimal ISO" ფაილს. შემდეგ ნებისმიერ ვირტუალ მანქანაზე (VirtualBox/VMWare) ან პირდაპირ კომპიუტერზე დააყენებთ ამ .iso ფაილს და შემდეგ დაიწყებთ კონფიგურაციას.

პირველ რიგში შექმნით ახალ იუზერს შეზღუდული შესაძლებლობით, რომელსაც გამოიყენებს მხოლოდ ნოდი და Nginx. მაგალითისთვის დავარქვათ ამ იუზერს "puser" (შეგიძლიათ ნებისმიერი რამე დაარქვათ მაგრამ ქვემოთ მოცემულ ინსტრუქციებში puser-ს გადააწერეთ იმ იუზერის სახელი რასაც თქვენ დაარქმევთ).

პირველ რიგში შევდივართ კონსოლში ადმინისტრატორის უფლებიანი იუზერით ან ვიყენებთ სუდოს და შემდეგ ყველაფერს ვწერთ კონსოლში რაც ქვემოთ წერია.

ვქმნით ახალ იუზერს და პაროლს
CODE
sudo useradd puser

sudo password puser

პირველ რიგში როგორც ყოველთვის ახალი ლინუქსის ინსტალაციისას, ვანახლებთ სისტემას და ვარესტარტებთ:
CODE
sudo yum update

sudo reboot

რესტარტის შემდეგ ვაყენებთ დეველოპმენტ თულს, ვამატებთ ნოდის რეპოზიტორის და ვაყენებთ ნოდს:
CODE
sudo yum groupinstall 'Development Tools'

sudo curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -

sudo yum install nodejs

ნოდის ინსტალაციას და ვერსიას ვამოწმებთ შემდეგი მოთხოვნით:
CODE
node --version

შემდეგ ვამატებს რეპელის რეპოზიტორის და ვაყენებთ NGINX სერვერს და ვამატებთ სტარტაპ სერვისად:
CODE
sudo yum install epel-release

sudo yum install nginx

sudo systemctl enable nginx

ეხლა შევქმნათ ფოლდერი ახალი იუზერის ჰომ დირექტორიაში სადაც განთავსდება ჩვენი ნოდის აპლიკაცია და დავარქვათ myapp (რა თქმა უნდა შეგიძლიათ რაც გინდათ ის დაარქვათ მაგრამ ქვემოთ მოცემულ კონფიგში სადაც შეგხვდებათ myapp, ყველგან გადააწერეთ სასურველი სახელი). ასევე ამავე ფოლდერში შევქმნათ ფოლდერი static სადაც ყველა სტატიკური ფაილები (სურათები/CSS და ასე შემდეგ განთავსდება) და NGINX-ში დაილინკება როგორც სტატიკური ფაილების დირექტორია რათა ნოდიდან არ მოგვიწიოს სტატიკური ფაილების თრევა (ნოდი არ არის გათვლილი სტატიკურ ფაილებთან სამუშაოდ).
CODE
sudo mkdir /home/puser/myapp

sudo mkdir /home/puser/myapp/static

ეხლა მოგვიწევს ფაილების რედაქტირება და თუ vi-ს ხმარება არ იცით გირჩევთ დააყენთ MC ფაილებთან სამუშაოდ:
CODE
sudo yum install mc

mc არის კონსოლის გრაფიკული ფაილ მენეჯერი რომელიც გაგიმარტივებთ დამწყებბებს ფაილებთან მუშაობას.

გასაშვებად კონსოლში ჩაწერთ sudo mc და შეხვალთ სასურველ დირექტორიაში ფაილის დასაედიტებლად... ფაილის გასახსნელად აჭერთ F4-ს, შესანახად F2-ს და ფაილიდან ან თვითონ ფაილ მენეჯერიდან გამოსასვლელად აჭერთ F10-ს.

----------------

შემდეგ ვიწყებთ NGINX-ის კონფიგურაციას... შევდივართ NGINX დირექტორიაში, ვხსნით MC-ს და ვხსნით ფაილს nginx.conf
CODE
cd /etc/nginx

sudo mc

# MC-ის გახსნის შემდეგ F4 ღილაკზე დაჭერით გახსენით ფაილი nginx.conf


კონფიგ ფაილში მოძებნეთ ხაზი სადაც წერია
CODE
user nginx;

და nginx-ის ნაცვლად ჩავწეროთ ჩვენი ახალი იუზერი
CODE
user puser;

შემდეგ ქვემოთ მოვძებნით ხაზს სადაც წერია:
CODE
http {

და ამ ხაზის შემდეგ ჩაამატეთ ეს კოდი:
CODE
# ეს არის მთავარი კონფიგი რომელიც NGINX აკავშირებს ნოდთან

upstream mynodeapp {
   server localhost:3000;
   
   # ამჟამად ეს კონფიგი უსმენს 3000 პორტზე გაშვებულ ნოდის აპლიკაციას,
   # მაგრამ სურვილისამებრ შეგიძლიათ გაუშვათ ზუსტად იგივე აპლიკაცია სხვა პორტებზეც
   # და ამისათვის საჭიროა რომ ქვემოთ მოცემული დაკომენტარებული პორტებს კომენტარები მოხსნათ
   
   #server localhost:3001;
   #server localhost:3002;
   #server localhost:3003;

   # ბევრ პორტზე ერთი და იგივე აპლიკაციის გაშვება იწვევს სერვერის პროცესორის მაქსიმალურად
   # გამოყენებას და დატვირთვის გადანაწილებას რაც გვაძლევს უკეთესს შედეგს, მაგრამ დასაწყისთვის დატოვეთ დაკომენტირებული

   keepalive 64;
}

server {
   # ქვედა ორი ხაზი უთითებს თუ რა პორტს მოუსმინოს
   listen 80;

   # აქ ჩაწერთ სერვერის IP მისამართს/მისამართებს ან დომენს/დომენებს რასაც უნდა მოუსმინოს ნოდმა. ქვემოთ არის დაკომენტარებული მაგალითები
   # server_name 127.0.0.1;
   # server_name 192.168.0.122;
   # server_name mydomain.com www.mydomain.com;
   # ამ შემთხვევაში მოვუსმინოთ IP მისამართს ან გამოიყენეთ რომელიმე ზედა მაგალითი
   server_name 192.168.0.120;
   
   
   # აქ ჩაამატებთ დირექტორიებს ან ფაილებს რაც გინდათ ნოდის გარეშე რომ წამოიღოს სტატიკურად
   location ~ ^/(img/files/|static/|robots.txt|favicon.ico) {
       root /home/puser/myapp/static;
       access_log off;
       expires max;
   }
   
   # "/" ნიშნავს რომ ზემოთ მოცემული სტატიკური ფაილების გარდა ყველა მოთხოვნა გაიგზავნება ნოდზე
   location / {
       proxy_redirect off;
       
       # http ჰედერების გადაგზავნა ნოდისთვის
       proxy_set_header X-Real-IP         $remote_addr;
       proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header Host              $http_host;
       proxy_set_header X-NginX-Proxy     true;
       proxy_set_header Connection        "";

       proxy_http_version     1.1;
       proxy_buffering        off;
       proxy_intercept_errors on;
       
       # ეს არის ყველაზე მთავარი ნაწილი რაც აკავშირებს ამ კონფიგის დასაწყიში განთავსებულ ნოდის პროქსისთან ყველა ლოკაციას
       proxy_pass http://mynodeapp;
   }
}

ეს არის მარტივი კონფიგი თუ როგორ დავაკავშიროთ NGINX ნოდს... NGINX არის უძლიერესი HTTP სერვერი რომელსაც უამარავი კონფიგურაცია აქვს ოღონდ აქ მაგას არ განვიხილავთ.

ამ კოდის კონფიგში ჩამატების შემდეგ, ვინახავთ ფაილს F2 ღილაკზე დაჭერით და გამოვდივართ MC-დან F10 ღილაკზე 2-ჯერ დაჭერით.

ამ ყველაფრის შემდეგ გააკეთებთ რესტარტს კიდევ ერთხელ:
CODE
sudo reboot

და რესტარტის შემდეგ 3000 პორტზე არსებული ნებისმიერი ნოდის აპლიკაცია ჩაიტვირთევა NGINX-ის მეოთხმოცე პორტზე. ანუ ამ კონფიგურაციის შემთხვევაში http://192.168.0.120/ -ზე გაკეთებული რექვესთი გადეცემა 3000 პორტზე გაშვებულ ნოდის აპლიკაციას.


თვითონ ნოდის აპლიკაციის გამართვას რაც შეეხება, ამისთვის საჭიროა შევიდეთ ჩვენი ახალი იუზერით (puser) ტერმინალში და მივყვეთ შემდეგ ინსტრუქციას:

პირველ რიგში დავაყენოთ express.js ჩვენი აპლიკაციის ფოლდერში (გლობალურადაც შეიძლება დაყენება მაგრამ ჯერ არ გვინდა ეს)
CODE
cd /home/puser/myapp

npm install express

შემდეგ ვუშვებთ ინიტ ფუნქციას და ვქმნით აპლიკაციის აღწერას (შეგიძლიათ ყველა კთხვაზე ენთერს დააჭიროთ და დეფოლტ მნიშვნელობებს ჩაწერს)
CODE
npm init

შემდეგ ვქმნით ფაილს მაგალითად app.js და ვანთავსებთ შემდეგ კოდს ამ ფაილში:
CODE
var express = require('express');
var app = express();

app.get('/', function (req, res) {
 res.send('Hello World');
});

app.get('/test', function (req, res) {
 res.send('Hello Test World');
});

app.listen(3000);

ამ აპლიკაციას გავუშვებთ შემდეგნაირად
CODE
node app.js

ამის შემდეგ ნოდი გაშვებული იქნება და NGIX-საც შეუძლია დაუკავშირდეს ამ აპლიკაციას... შესაბამისად თუ შეხვალ ბრაუზერიდან http://192.168.0.120/ -ზე, ეკრანზე დაიწერება "Hello World", ხოლო თუ შეხვალ http://192.168.0.120/test -ზე, ეკრანზე დაიწერება "Hello Test World".

192.168.0.120 რა თქმა უნდა მაგალითად მოყვანილი IP არის, რომელიც უნდა ჩანაცვლდეს nginx.conf ფაილში თვენი სერვერი შესაბამისი IP მისამართით ან დომენით.

ეს არის საწყისი ეტაპი. თუ ზუსტად მიყვებით ინსტრუქციას, ყველაფერი იმუშავებს საათივით smile.gif შეიძლება რამე შეცდომა გამეპარა ამდენი წერის შემდეგ მაგრამ თუ სადმე error ამოგიგდოთ, აქ დაწერეთ ან სქრინი დადეთ და ვნახავ რისი ბრალია.

ასევე ეს კონფიგურაცია არ უშვებს თქვენი ნოდის აპლიკაციას სტარტაპში... რესტარტის ან კონსოლის დახურვის შემდეგ, NGINX ნოდის აპლიკაციას ვერ დაუკავშირდება და ამოგიგდებთ ერორს. ეს ნიშნავს რომ ყოველი კონსოლის გახსნისას უნდა შეხვიდეთ puser-ით ტერმინალში, შეხვიდეთ თქვენი აპლიკაციის ფოლდერში (cd /home/puser/myapp) და გაუშვათ აპლიკაცია ხელით
CODE
node app.js

დასაწყისისთვის ასე ჯობია ვინაიდან ტერმინალშ შეხედავთ თუ რამე შეცდომა დაფიქსირდება, მაგრამ თუ ნოდის აპლიკაციის სტარტაპში დამატება გინდათ და ხელით გაშვება არ გჭირდებოდეთ მომავალში, ესეც ძალიან მარტივია და შემდეგ პოსტებშ დავწერ როგორ დავამატოთ ნოდის აპლიკაცია ცენტოსში სერვისად.

This post has been edited by web_nts on 14 Nov 2016, 01:55

მიმაგრებული სურათი
logo_header.png
Svani91
Super Crazy Member


******
ჯგუფი: Moderators
წერილები: 7304
წევრი No.: 73460
რეგისტრ.: 4-November 08

გამოგზავნილია: 14 Nov 2016, 02:40  #49263402      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
web_nts

რამე ნორმალურ ფასიანი ვიპიეს არ გაქვს დატესტილი რო მირჩიო?

ჰეროკუზე ქოფი ფეისთს, ასე მირჩევნია გავაკეთო

და მადლობა up.gif
Roofus
chi


******
ჯგუფი: Members
წერილები: 5761
წევრი No.: 366
რეგისტრ.: 6-October 01

გამოგზავნილია: 14 Nov 2016, 02:44  #49263411      · პროფილი · პირადი მიმოწერა · ჩატი · ვებგვერდი
Svani91
ატლანტიკი არის კარგი ssd VPS

http://atlantic.net

5$ პლანი აღარ აქვთ ანდა ქონდათ.

+კარგი ტუტორიალია
linux mint-ზე ვცდი როგორ გამომივა nodejs+nginx

This post has been edited by Roofus on 14 Nov 2016, 02:46


--------------------
ხელმოწერის მოსაფიქრებლად კრეატიულობა არ მყოფნის...

http://saba.longevity.ge - სულხან-საბა ორბელიანის ქართული ლექსიკონი
web_nts
EVERYBODY LIES


*******
ჯგუფი: Members
წერილები: 11772
წევრი No.: 11840
რეგისტრ.: 28-July 05

გამოგზავნილია: 14 Nov 2016, 03:24  #49263509      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
Svani91
https://www.ovh.ie/vps/vps-ssd.xml
OVH ყველაზე მუშაა იაფიანი ვიპიესებიდან yes.gif

3 ევროდ (~$3.25) იღებ შემდეგ მონაცემებიან სერვერს: 2GB RAM, 10GB SSD და 1 ვირტუალო პროცესორი 2.4 გიგაჰერცით.

საკმარისზე მეტია ცენტოსისთვის... დაჟე დღეში 5000 ვიზიტორიან საიტს გაქაჩავს თუ კარგი ოპტიმიზაცია აქვს ნოდის კოდს და მარტივი საიტია smile.gif
Svani91
Super Crazy Member


******
ჯგუფი: Moderators
წერილები: 7304
წევრი No.: 73460
რეგისტრ.: 4-November 08

გამოგზავნილია: 14 Nov 2016, 03:31  #49263525      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
web_nts
Roofus

მადლობები up.gif

კიდევ მექნება კითხვები, თუ არ შეგაწუხებ

უკვე თვითონ ნოდის აპპს რაც ეხება
ჯერ მხოლოდ როუტები მაქვს გაწერილი და ვაბრუნებინებ html ს პატარა მონაცემებიანად
web_nts
EVERYBODY LIES


*******
ჯგუფი: Members
წერილები: 11772
წევრი No.: 11840
რეგისტრ.: 28-July 05

გამოგზავნილია: 14 Nov 2016, 04:00  #49263578      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
Svani91
QUOTE
ჯერ მხოლოდ როუტები მაქვს გაწერილი და ვაბრუნებინებ html ს პატარა მონაცემებიანად

რაც მთავარია უნდა იყოს ყველაფერი ასინქრონული up.gif

აი მაგალითად ეს კოდი
CODE
for (var i = 0; i < 10000000; i++) {
   i++;
}

ყველაფერს მიაკლავს სანამ 5 მილიონჯერ არ შესრულდება ეს ლუპი. ეს ცუდი მაგალითია და არც 5 მილიონი ლუპის შესრულება არ არის დიდი საქმე თანამედროვე კომპიუტერებისთვის, მაგრამ წარმოიდგინე რომ ერთდოულად 11-მა ადამიანმა მოითხოვა დაკავშირება ამ გვერდთან სადაც მსგავსი ლუპია... პირველი მთხოვნის შესრულებას დასჭირდა 0.2 წამი შესასრულებლად, მეორე მოთხოვნა სანამ პირველი არ დასრულდება უნდა დაელოდოს 0.2 წამი და შემდეგ თვითონაც 0.2 წამი ასრულოს ეს მოთხოვნა და საბოლოოდ მეათე მოთხოვნას მოუწევს 2 წამი ლოდინი სანამ მისი ჯერი მოვა, ხოლო 2 წამი უკვე ძალიან დიდი დროა ლოდინისთვის. ამას დაუმატე როდესაც ამ ორი წამის განმავლობაში სხვები ცდილობენ შესვლას, რიგი იწელება, დრო იზრდება, ხალხი ცდილობს დაარეფრეშოს გვერდი ამ დაგვიანების გამო და რეალურად პირიქით რიგს ამატებენ. პოპულარულ სერვერზე შეიძლება მუშაობა ჩააგდოს მთელი დღით რამე სინქრონულმა სკრიპტმა. სინქრონული სკრიპტების გარეშე არ გამოვა რა თქმა უნდა (ლუპი ყოველთვის საჭიროა), მაგრამ რაც შეიძლება უნდა ეცადო რომ თავიდან აირიდო.

ნოდში დაწერილი აპლიკაცია არის single threaded აპლიკაცია რაც ნიშნავს რომ სანამ რაღაც სინქრონული მოთხოვნა არ დასრულდება, მანამდე სხვა ყველაფერი გაჩერებულია (ისევე როგორც ბრაუზერის ჯავასკრიპტში, უბრალოდ შენი ბრაუზერის ჯავასკრიპტს ბევრი ადამიანი არ უკავშირდება ერთდროულად და ამიტომ თუნდაც დიდი ლუპები თვალისთვის შესამჩნევ ცვლილებს არ გვაძლევს).
Svani91
Super Crazy Member


******
ჯგუფი: Moderators
წერილები: 7304
წევრი No.: 73460
რეგისტრ.: 4-November 08

გამოგზავნილია: 14 Nov 2016, 04:11  #49263590      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
web_nts

2 კვირაა ვკითხულობ და იდეაც ეგაა ნოდის რამდენადაც მე გავიგე

ეხლა ერთი კითხვა მაქვს, დავდებ app.js - ს ფრაგმენტს

არის 2 როუტი და ორივეს სჭირდება ჰედერ ქასთამ დეიტა და არ მინდა რო ესე ვამეორო კოდი, რამე სოლუშენი ხო არ გახსენდება?

CODE

//Include data factory
var dataFactory = require('./dataFactory');

app.get('/', function (req, res) {
   res.render('index.html', {
       sliderData : dataFactory.sliderData,
       headerData : dataFactory.headerData,
       footerData : dataFactory.footerData,
       homeGalleryData : dataFactory.homeGalleryData
   });
})

app.get('/products', function(req, res){
   res.render('product-mirror.html', {
       headerData : dataFactory.headerData,
       footerData : dataFactory.footerData
   });
});


html - ში

CODE
<% include includes/header.ejs %>


This post has been edited by Svani91 on 14 Nov 2016, 04:13
X2D3T9



*****
ჯგუფი: Registered
წერილები: 1988
წევრი No.: 200362
რეგისტრ.: 31-March 15

გამოგზავნილია: 14 Nov 2016, 13:06  #49264975      · პროფილი · პირადი მიმოწერა · ჩატი
მოკლედ მაინტერესებს კონკრეტული ლინკები პოსტ გეთ და ფუთ მეთოდით გაგზავნილი მოთხოვნები დაბლოკოს სხვა ჰოსტიდან ....
ჰეადერeბის ამბავია ხომ? დაუწეროს unautorized ...

passport ით ვნახე როგორ კეთდება ავტორიზაცია და შეზღუდვა მაგრამ მე კონკრეტულ მისამართზე მინდა სადაც პასპორტს არ ვიყენებ ...
დაბლოკოს არა მარტო პორველი "პარამეტრი"(არვიცი სწორად როგორ ვთქვა) არამედ ასე

/ლინკი/სრრინგი/სტრინგი

ანუ მთლიანი როუტი რა განვითარ3ბაც არუნდა ქონდეს

This post has been edited by X2D3T9 on 14 Nov 2016, 13:14


--------------------
do{
Life.eat();
Life.sleep();
Life.study();
Life.behappy();
}while{ Life.stat() != end }
Otory
Insane


*******
ჯგუფი: Members
წერილები: 16585
წევრი No.: 1007
რეგისტრ.: 9-June 02

გამოგზავნილია: 14 Nov 2016, 13:15  #49265019      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა · ვებგვერდი
Svani91
CODE
app.locals

ან
CODE
res.locals

ჩვეულებრივი ობიექტებია და შეგიძლია მიდლვეარში (ან თვითონ რიქუესთში) ჩასვა რაც გინდა.
მაგალითად, გააკეთო setHeaderData მიდლვეარი, მასში წამოიღო საჭირო დატა და მერე app.locals.headerData = შენი დატა (ან თუ რამე კონკრეტულად რიქვესთს ეხება, მაგალითად იუზერის ინფო, სეტინგები, ლოქეილი - მაშინ res.locals.headerData = შენი დატა

მგონი ეგაა რაც გინდა.

ნუ კიდე, შეგიძლია იზვრაშენცობები აკეთო და ზოგადად req-ში შეინახო ობიექტად რასაც ატან და მერე res.render('template', req.myParamObject); smile.gif


--------------------
Over 9000!
web_nts
EVERYBODY LIES


*******
ჯგუფი: Members
წერილები: 11772
წევრი No.: 11840
რეგისტრ.: 28-July 05

გამოგზავნილია: 14 Nov 2016, 15:50  #49266103      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
X2D3T9
QUOTE
მოკლედ მაინტერესებს კონკრეტული ლინკები პოსტ გეთ და ფუთ მეთოდით გაგზავნილი მოთხოვნები დაბლოკოს სხვა ჰოსტიდან ....

სხვა ჰოსტიდან რას გულისხმობ? ანუ მაგალითად შენი საიტი არის http://example.com/ და ამ საიტზე თუ ვინმემ გადმოსცა პოსტ ან გეთ ცვლადები სხვა დომენიდან მაგალითად http://otherexample.com -იდან, დაბლოკოს ავტომატურად? თუ ასე მაშინ უნდა დაადგინო რეფერალის ჰედერი ექსპრესიდან
CODE
req.get('Referrer')
მაგრამ არ არის რეკომენდირებული უსაფრთხოებასთან დაკავშირებული გადაწყვეტილებების ჰედერზე დამოკიდებულება ვინაიდან ჰედერის შეცვლა შეიძლება მარტივად.

Svani91
QUOTE
არის 2 როუტი და ორივეს სჭირდება ჰედერ ქასთამ დეიტა და არ მინდა რო ესე ვამეორო კოდი, რამე სოლუშენი ხო არ გახსენდება?

თუ ხშირად იყენებ ერთი და იგივე ტექსტს ჰედერში, რატომ არ აინტეგრირებ ამ ტექსტის დეფოლტ ვერსიას თვითონ ტემპლეიტში?

CODE
<% if(typeof headerData !== 'undefined') { %>
   <%=headerData%>
<% } else { %>
   Default Header Text
<% } %>

ანუ თუ headerData არ გადაეცემა ტემპლეიტს, მაშინ დაწერს "Default Header Text" და თუ იშვიათად გჭირდება ამ ჰედერის შეცვლა მხოლოდ მაშინ გადასცემ headerData-ს და იმას დაგიწერს. თუ სწორად გავიგე რაც გინდოდა ესაა.

შენ შემთხვევაში Default Header Text-ის მაგივრად ჩაწერ იმას რასაც გადასცემდი dataFactory.headerData-თი და საერთოდ აღარ მოგიწერს გამეორება და ხსენება headerData-სი იმ როუტებში.

This post has been edited by web_nts on 14 Nov 2016, 15:53
Roofus
chi


******
ჯგუფი: Members
წერილები: 5761
წევრი No.: 366
რეგისტრ.: 6-October 01

გამოგზავნილია: 14 Nov 2016, 17:56  #49266964      · პროფილი · პირადი მიმოწერა · ჩატი · ვებგვერდი
web_nts
ლარაველს აქვს მაგალითად csrf field და იქ არის ტოკენი და ამ ტოკენს ამოწმებს ყოველ POST რექუესტზე რომ კროს საიტ სკრიპტინგი არ იყოს შესაძლებელი. მსგავსი რამე აქვს ნოდს? smile.gif
0 წევრი ათვალიერებს ამ თემას (0 სტუმარი და 0 უჩინარი წევრი)
0 წევრი:
Topic Options Pages: (6) [1] 2 3 ... ბოლო » გამოხმაურება · ახალი თემა · ახალი გამოკითხვა

 



ფორუმის სერვერების განთავსებას და ინტერნეტთან კავშირს უზრუნველყოფს: CLOUD9
[ Script Execution time: 0.4734 ]   [ 13 queries used ]   [ GZIP Disabled ]