Node.js দ্রুত ফাইল সার্ভার(HTTP এর উপর স্ট্যাটিক ফাইল)




fileserver (18)

ডিম / PROTO সার্ভার শুধুমাত্র

যদি আপনার এটির প্রয়োজন হয় তবে এটি চেষ্টা করুন:

const http = require('http');
const fs = require('fs');
const port = 3000;
const app = http.createServer((req,res) => {
    res.writeHead(200);
    res.end(fs.readFileSync(__dirname + req.url));
});

app.listen(port);

নোট: আপনার ঠিকানাটির অংশ হিসাবে আপনাকে "/index.html" ব্যবহার করতে হবে যেমন " http://localhost:3000/index.html "

Node.js প্রস্তুত-ব্যবহারযোগ্য সরঞ্জাম ( npm সহ ইনস্টল করা), যা ফোল্ডারে HTTP সার্ভারের ফাইল সার্ভার হিসাবে প্রকাশ করতে সহায়তা করবে।

উদাহরণ, যদি আমি আছে

D:\Folder\file.zip
D:\Folder\file2.html
D:\Folder\folder\file-in-folder.jpg

তারপরে D:\Folder\ node node-file-server.js আমি ফাইল অ্যাক্সেস করতে পারি

http://hostname/file.zip
http://hostname/file2.html
http://hostname/folder/file-in-folder.jpg

কেন আমার নোড স্ট্যাটিক ফাইল সার্ভার অনুরোধ ড্রপ? কিছু রহস্যময় রেফারেন্স

স্ট্যান্ডার্ড node.js স্ট্যাটিক ফাইল সার্ভার

যদি এমন কোন টুল না থাকে তবে আমি কোন ফ্রেমওয়ার্ক ব্যবহার করবো?

সম্পর্কিত: NodeJS বেসিক স্ট্যাটিক ফাইল সার্ভার


প্রতিশ্রুতি পরিবর্তে এক লাইন ™ প্রুফ

প্রথমটি http-server , hs - link

npm i -g http-server   // install
hs C:\repos            // run with one line?? FTW!!

দ্বিতীয় ZEIT.co - link দ্বারা serve হয়

npm i -g serve         // install
serve C:\repos         // run with one line?? FTW!!

নিম্নলিখিত বিকল্পগুলি উপলব্ধ, যদি এটি আপনাকে সিদ্ধান্ত নিতে সাহায্য করে।

C:\Users\Qwerty>http-server --help
usage: http-server [path] [options]

options:
  -p           Port to use [8080]
  -a           Address to use [0.0.0.0]
  -d           Show directory listings [true]
  -i           Display autoIndex [true]
  -g --gzip    Serve gzip files when possible [false]
  -e --ext     Default file extension if none supplied [none]
  -s --silent  Suppress log messages from output
  --cors[=headers]   Enable CORS via the "Access-Control-Allow-Origin" header
                     Optionally provide CORS headers list separated by commas
  -o [path]    Open browser window after starting the server
  -c           Cache time (max-age) in seconds [3600], e.g. -c10 for 10 seconds.
               To disable caching, use -c-1.
  -U --utc     Use UTC time format in log messages.

  -P --proxy   Fallback proxy if the request cannot be resolved. e.g.: http://someurl.com

  -S --ssl     Enable https.
  -C --cert    Path to ssl cert file (default: cert.pem).
  -K --key     Path to ssl key file (default: key.pem).

  -r --robots  Respond to /robots.txt [User-agent: *\nDisallow: /]
  -h --help    Print this list and exit.
C:\Users\Qwerty>serve --help

  Usage: serve.js [options] [command]

  Commands:

    help  Display help

  Options:

    -a, --auth      Serve behind basic auth
    -c, --cache     Time in milliseconds for caching files in the browser
    -n, --clipless  Don't copy address to clipboard (disabled by default)
    -C, --cors      Setup * CORS headers to allow requests from any origin (disabled by default)
    -h, --help      Output usage information
    -i, --ignore    Files and directories to ignore
    -o, --open      Open local address in browser (disabled by default)
    -p, --port   Port to listen on (defaults to 5000)
    -S, --silent    Don't log anything to the console
    -s, --single    Serve single page applications (sets `-c` to 1 day)
    -t, --treeless  Don't display statics tree (disabled by default)
    -u, --unzipped  Disable GZIP compression
    -v, --version   Output the version number

পরিবর্তনগুলি দেখার জন্য আপনাকে যদি নজর hostr , হেনরি hostr উত্তরটি ক্রেডিট করুন


Npm ব্যবহার করে এক্সপ্রেস ইনস্টল করুন: https://expressjs.com/en/starter/installing.html

আপনার index.html এর একই স্তরে server.js নামে একটি ফাইল তৈরি করুন এই সামগ্রী সহ:

var express = require('express');
var server = express();
server.use('/', express.static(__dirname + '/'));
server.listen(8080);

যদি আপনি এটি অন্য কোনও স্থানে রাখতে চান, তবে তৃতীয় লাইনে পাথটি সেট করুন:

server.use('/', express.static(__dirname + '/public'));

আপনার ফাইল ধারণকারী ফোল্ডারে সিডি এবং এই কমান্ডের সাহায্যে কনসোল থেকে নোড চালান:

node server.js

স্থানীয় হোস্ট ব্রাউজ করুন: 8080


অনুরোধগুলি কেন ড্রপ হচ্ছে তাও আপনি জিজ্ঞাসা করুন - আপনার ক্ষেত্রে নির্দিষ্ট কারণ কী তা নিশ্চিত না, তবে সামগ্রিকভাবে আপনি ডেডিকেটেড মিডলওয়্যার (nginx, S3, CDN) ব্যবহার করে স্ট্যাটিক সামগ্রীটি আরও ভালভাবে সার্ভার করেন কারণ নোড সত্যিই এই নেটওয়ার্কিং প্যাটার্নের জন্য অনুকূলিত নয়। এখানে আরও ব্যাখ্যা দেখুন (বুলেট 13): http://goldbergyoni.com/checklist-best-practice-of-node-js-in-production/


আপনি এক্সপ্রেস ফ্রেমওয়ার্ক ব্যবহার করলে, এই কার্যকারিতা যেতে প্রস্তুত হয়।

একটি সহজ ফাইল ভজনা অ্যাপ্লিকেশন সেটআপ করার জন্য এই কাজ করুন:

mkdir yourapp
cd yourapp
npm install express
node_modules/express/bin/express

আপনি serve-me চেষ্টা serve-me পারেন

এটি ব্যবহার করা খুব সহজ:

ServeMe = require('serve-me')();
ServeMe.start(3000);

এখানেই শেষ.

পিডি: ডিফল্টরূপে পরিবেশিত ফোল্ডারটি "সর্বজনীন"।


আপনি যদি প্রস্তুত সরঞ্জামটি ব্যবহার করতে না চান তবে আপনি নীচের কোডটি ব্যবহার করতে পারেন, যেমনটি আমার দ্বারা প্রদর্শিত হয়েছে https://developer.mozilla.org/en-US/docs/Node_server_without_framework :

var http = require('http');
var fs = require('fs');
var path = require('path');

http.createServer(function (request, response) {
    console.log('request starting...');

    var filePath = '.' + request.url;
    if (filePath == './')
        filePath = './index.html';

    var extname = path.extname(filePath);
    var contentType = 'text/html';
    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
        case '.json':
            contentType = 'application/json';
            break;
        case '.png':
            contentType = 'image/png';
            break;      
        case '.jpg':
            contentType = 'image/jpg';
            break;
        case '.wav':
            contentType = 'audio/wav';
            break;
    }

    fs.readFile(filePath, function(error, content) {
        if (error) {
            if(error.code == 'ENOENT'){
                fs.readFile('./404.html', function(error, content) {
                    response.writeHead(200, { 'Content-Type': contentType });
                    response.end(content, 'utf-8');
                });
            }
            else {
                response.writeHead(500);
                response.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
                response.end(); 
            }
        }
        else {
            response.writeHead(200, { 'Content-Type': contentType });
            response.end(content, 'utf-8');
        }
    });

}).listen(8125);
console.log('Server running at http://127.0.0.1:8125/');

আপডেট যদি আপনার বহিরাগত চাহিদা / ফাইল থেকে আপনার সার্ভারটি অ্যাক্সেস করতে হয় তবে আপনার নীড.জেজে ফাইলটি নীচের লিখিতভাবে CORS কে অতিক্রম করতে হবে, যেমন আমি here একটি পূর্ববর্তী উত্তর উল্লেখ করেছি

// Website you wish to allow to connect
response.setHeader('Access-Control-Allow-Origin', '*');

// Request methods you wish to allow
response.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

// Request headers you wish to allow
response.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
response.setHeader('Access-Control-Allow-Credentials', true);

হালনাগাদ

অ্যাড্রিয়ান উল্লেখ করে, মন্তব্যগুলিতে, তিনি here সম্পূর্ণ ব্যাখ্যা সহ একটি ES6 কোড লিখেছেন, যে কোডটিকে মূল কারণে সাইট থেকে যে কোনও কারণে যুক্ত করে আমি তার কোডটি আবার পোস্ট করছি:

const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');
const port = process.argv[2] || 9000;

http.createServer(function (req, res) {
  console.log(`${req.method} ${req.url}`);

  // parse URL
  const parsedUrl = url.parse(req.url);
  // extract URL path
  let pathname = `.${parsedUrl.pathname}`;
  // based on the URL path, extract the file extention. e.g. .js, .doc, ...
  const ext = path.parse(pathname).ext;
  // maps file extention to MIME typere
  const map = {
    '.ico': 'image/x-icon',
    '.html': 'text/html',
    '.js': 'text/javascript',
    '.json': 'application/json',
    '.css': 'text/css',
    '.png': 'image/png',
    '.jpg': 'image/jpeg',
    '.wav': 'audio/wav',
    '.mp3': 'audio/mpeg',
    '.svg': 'image/svg+xml',
    '.pdf': 'application/pdf',
    '.doc': 'application/msword'
  };

  fs.exists(pathname, function (exist) {
    if(!exist) {
      // if the file is not found, return 404
      res.statusCode = 404;
      res.end(`File ${pathname} not found!`);
      return;
    }

    // if is a directory search for index file matching the extention
    if (fs.statSync(pathname).isDirectory()) pathname += '/index' + ext;

    // read file from file system
    fs.readFile(pathname, function(err, data){
      if(err){
        res.statusCode = 500;
        res.end(`Error getting the file: ${err}.`);
      } else {
        // if the file is found, set Content-type and send data
        res.setHeader('Content-type', map[ext] || 'text/plain' );
        res.end(data);
      }
    });
  });


}).listen(parseInt(port));

console.log(`Server listening on port ${port}`);

আমি এই পৃষ্ঠার কোন উত্তর দিয়ে অনেক ভাগ্যবান ছিল না, তবে নীচের, এই কৌশলটি করলো।

নিম্নলিখিত কন্টেন্ট সহ একটি server.js ফাইল যোগ করুন:

const express = require('express')
const path = require('path')
const port = process.env.PORT || 3000
const app = express()

// serve static assets normally
app.use(express.static(__dirname + '/dist'))

// handle every other route with index.html, which will contain
// a script tag to your application's JavaScript file(s).
app.get('*', function (request, response){
  response.sendFile(path.resolve(__dirname, 'dist', 'index.html'))
})

app.listen(port)
console.log("server started on port " + port)

এছাড়াও আপনি express প্রয়োজন নিশ্চিত করুন। চালানো yarn add express --save বা yarn add express --save npm install express --save করুন - আপনার সেটআপের উপর নির্ভর করে (আমি yarn দ্রুত এটির সুপারিশ করতে পারি)।

আপনি আপনার সামগ্রী পরিবেশন করা হয় যে কোন ফোল্ডারে dist পরিবর্তন করতে পারেন। আমার সহজ প্রোজেক্টের জন্য, আমি কোনও ফোল্ডার থেকে dist ছিল না, তাই আমি কেবল dist ফাইল নাম মুছে ফেললাম।

তারপর আপনি node server.js চালাতে পারে। আমার package.json সার্ভারে আমার প্রকল্প আপলোড করার জন্য, আমার package.json ফাইলটিতে নিম্নলিখিতটি যুক্ত করতে হবে:

  "scripts": {
    "start": "node server.js"
  }

আমি হিউস্টনকে কাজে এবং ব্যক্তিগত প্রকল্পগুলির জন্য ব্যবহার করি, এটি আমার জন্য ভাল কাজ করে।

https://github.com/alejandro/Houston


একটি ভাল "ব্যবহারের জন্য প্রস্তুত সরঞ্জাম" বিকল্প http-server হতে পারে:

npm install http-server -g

এটি ব্যবহার করার জন্য:

cd D:\Folder
http-server

অথবা, এই মত:

http-server D:\Folder

এটি পরীক্ষা করে দেখুন: https://github.com/nodeapps/http-server


এটি এখনও এনপিএম নয়, তবে আমি এক্সপ্রেসে একটি সহজ স্ট্যাটিক সার্ভার তৈরি করেছি যা আপনাকে ফর্ম জমা দেওয়ার অনুমতি দেয় এবং একটি লেনদেনের ইমেল পরিষেবা (এখন সেদ্রিগ্রিড, ম্যান্ড্রিল আসছে) এর মাধ্যমে ইমেল করে।

https://github.com/jdr0dn3y/nodejs-StatServe


এনপিএম রেজিস্ট্রিতে অনুসন্ধান হচ্ছে https://npmjs.org/search?q=server , আমি স্ট্যাটিক সার্ভার খুঁজে পেয়েছি https://github.com/maelstrom/static-server সার্ভার

একজন সহকর্মীকে কোনও ফাইল পাঠানোর জন্য কখনও প্রয়োজন, কিন্তু 100 এমবি জন্তুকে ইমেল করতে বিরক্ত করা যাবে না? একটি সাধারণ উদাহরণ জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন চালাতে চেয়েছিলেন, কিন্তু ফাইলের মাধ্যমে এটি চালানোর সমস্যা ছিল: //// প্রোটোকল? Samba, বা FTP, অথবা কনফিগারেশন ফাইল সম্পাদনা করার জন্য প্রয়োজনীয় অন্য কোনও সংস্থান ছাড়া LAN এ আপনার মিডিয়া ডিরেক্টরি ভাগ করতে চেয়েছিলেন? তারপর এই ফাইল সার্ভার আপনার জীবন যে সামান্য বিট সহজ করা হবে।

সহজ স্ট্যাটিক স্টাফ সার্ভার ইনস্টল করার জন্য, npm ব্যবহার করুন:

npm install -g static-server

তারপর একটি ফাইল বা একটি ডিরেক্টরি পরিবেশন করা, কেবল চালানো

$ serve path/to/stuff
Serving path/to/stuff on port 8001

যে এমনকি ফোল্ডার কন্টেন্ট তালিকাভুক্ত করতে পারে।

দুর্ভাগ্যক্রমে, এটি ফাইল পরিবেশন করতে পারে :)


ব্রাউজার-সিঙ্ক: বেশ স্ট্যাটিক ওয়েব সার্ভার যা বেশ চমৎকার।

এটি নোড প্যাকেজ ম্যানেজার ব্যবহার করে ডাউনলোড করা যেতে পারে:

npm install -g browser-sync

ইনস্টলেশনের পরে, cmd প্রম্পটে প্রকল্প ফোল্ডারে নেভিগেট করুন এবং কেবল নিম্নলিখিতটি চালান:

browser-sync start --server --port 3001 --files="./*"

এটি ব্রাউজারের বর্তমান ফোল্ডারে সমস্ত ফাইল সরবরাহ করা শুরু করবে।

আরো browser-sync থেকে পাওয়া যাবে

ধন্যবাদ।


যদি আপনি কোনও পূর্বশর্ত ছাড়াই অতিমাত্রায় হালকা HTTP সার্ভারে নিবিড় থাকেন তবে আপনাকে এটি দেখতে হবে: mongoose



স্ট্যাটিক সম্পদ পরিবেশন করতে নোড ব্যবহার করে কর্মক্ষমতা সুস্থ বৃদ্ধি করার জন্য, আমি Buffet ব্যবহার করার পরামর্শ দিই। এটি একটি ওয়েব অ্যাপ্লিকেশন অ্যাক্সিলারেটরের মতো কাজ করে যা একটি ক্যাশিং HTTP বিপরীত প্রক্সি হিসাবেও পরিচিত তবে এটি কেবল নির্বাচিত ডিরেক্টরিটিকে মেমরিতে লোড করে।

বুফে একটি পুরোপুরি-বাফারড পদ্ধতি গ্রহণ করে - আপনার অ্যাপ্লিকেশন বুট করার সময় সমস্ত ফাইল মেমরির মধ্যে সম্পূর্ণ লোড হয়, তাই আপনি ফাইল সিস্টেমের বার্ন অনুভব করবেন না। অভ্যাস, এই অত্যন্ত দক্ষ। আপনার অ্যাপের সামনে ভার্নিশ স্থাপন করলেও এটি খুব ধীর হতে পারে!

আমরা কোডপাইল সাইটে এটি ব্যবহার করি এবং একটি পৃষ্ঠায় ~ 700 অনুরোধ / সেকেন্ড থেকে> 4k অনুরোধগুলি / সেকেন্ড বৃদ্ধি পেয়েছি যা 1k কনকুরেন্ট ব্যবহারকারী সংযোগ লোডের অধীনে 25 টি সংস্থান ডাউনলোড করে।

উদাহরণ:

var server = require('http').createServer();

var buffet = require('buffet')(root: './file'); 

 

server.on('request', function (req, res) {

  buffet(req, res, function () {

    buffet.notFound(req, res);

  });

});

 

server.listen(3000, function () {

  console.log('test server running on port 3000');

});

connect আপনি খুঁজছেন কি হতে পারে।

সঙ্গে সহজে ইনস্টল করা:

npm install connect

তারপরে সবচেয়ে মৌলিক স্ট্যাটিক ফাইল সার্ভারটি এভাবে লেখা যেতে পারে:

var connect = require('connect'),
    directory = '/path/to/Folder';

connect()
    .use(connect.static(directory))
    .listen(80);

console.log('Listening on port 80.');

npm install node-static -g মাধ্যমে নোড-স্ট্যাটিক সার্ভারটি প্রথমে ইনস্টল করুন আপনার সিস্টেমে এটি বিশ্বব্যাপী ইনস্টল করার জন্য, তারপরে আপনার ফাইলগুলি কোথায় অবস্থিত ডিরেক্টরিটিতে নেভিগেট করুন, static এটি 8080 পোর্টে শোনাচ্ছে, সার্ভারটি চালু করুন, naviaget ব্রাউজার এবং টাইপ localhost: 8080 / আপনার এইচটিএমএল ফাইলনাম।







fileserver