Node.js त्वरित फ़ाइल सर्वर (HTTP पर स्थिर फ़ाइलें)


642

क्या 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

मेरे नोड स्थिर फ़ाइल सर्वर अनुरोधों को क्यों छोड़ रहा है? कुछ रहस्यवादी संदर्भ

मानक नोड। स्थिर फ़ाइल सर्वर

यदि ऐसा कोई उपकरण नहीं है, तो मुझे किस ढांचे का उपयोग करना चाहिए?

संबंधित: NodeJS में बेसिक स्टैटिक फाइल सर्वर


मैंने Cachemere नामक एक मॉड्यूल लिखा है जो आपको ऐसा करने देता है। यह आपके सभी संसाधनों को स्वचालित रूप से कैश कर देता है। इसे देखें: github.com/topcloud/cachemere
Jon

npmjs.com/package/local-web-server - हल्के स्थिर वेब सर्वर, शून्य कॉन्फ़िगरेशन
विक्टर

जवाबों:


1090

एक अच्छा "रेडी-टू-यूज़ टूल" विकल्प http-server हो सकता है:

npm install http-server -g

इसके प्रयेाग के लिए:

cd D:\Folder
http-server

या, इस तरह:

http-server D:\Folder

इसे देखें : https://github.com/nodeapps/http-server


10
यह कमाल का है। मुझे किसी कारण के लिए एक पता बीसी निर्दिष्ट करने की आवश्यकता है जो डिफ़ॉल्ट ०.०.०.० मेरे देव वातावरण में सहयोग नहीं कर रहा था। http-server -a localhostएर डन।
सैम बेरी

41
i का उपयोग करेंhttp-server -a localhost -p 80
मुहम्मद उमेर

10
यह ब्राउज़र-सिंक की भी जाँच करने के लायक है, जो कम-से-कम एक ही काम कर सकता है, लेकिन फाइलों के संशोधित होने पर लाइव-अपडेट के अतिरिक्त बोनस के साथ।
निक एफ

3
--corsAccess-Control-Allow-Origin:*प्रतिक्रिया हेडर के साथ भेजने के लिए (यानी जब एक json फ़ाइल की सेवा)
डैनियल एफ

9
npx http-server- npx इसे एक-लाइनर में बदल देता है जो आवश्यक फाइलों को डाउनलोड करता है और इसे चलाता है।
माइक मैकाय

185

यदि आप तैयार टूल का उपयोग नहीं करना चाहते हैं, तो आप नीचे दिए गए कोड का उपयोग कर सकते हैं, जैसा कि मेरे द्वारा 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/');

अद्यतन यदि आपको अपने सर्वर को बाहरी मांग / फ़ाइल से एक्सेस करने की आवश्यकता है, तो आपको नीचे लिखकर, अपने नोड में। कोर फाइल को पार करने की आवश्यकता है, जैसा कि मैंने यहां पिछले उत्तर में बताया था

// 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);

अपडेट करें

जैसा कि एड्रियन ने उल्लेख किया है, टिप्पणियों में, उन्होंने यहां पूर्ण स्पष्टीकरण के साथ एक ईएस 6 कोड लिखा , मैं किसी कारण से मूल साइट से चले गए कोड के मामले में, नीचे दिए गए अपने कोड को फिर से पोस्ट कर रहा हूं:

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}`);

2
निश्चित रूप से, response.writeHead(200होना चाहिए response.writeHead(404;)
थॉमस हंटर II

14
क्या वह कोड 127.0.0.1/../../../etc/passwd जैसा कुछ करके फाइल ट्री को ऊपर नहीं जाने देगा ? मुझे उसके खिलाफ कोई जाँच नहीं दिख रही है।
रॉल्फ

3
अगर कोई ES6 + संस्करण में रुचि है, मैं एक स्थिर फ़ाइल सर्वर बनाया है कि हैंडल MIME प्रकार: gist.github.com/amejiarosario/53afae82e18db30dadc9bc39035778e5
एड्रियन

1
@ एड्रियन यह कोड बहुत भयानक है, लेकिन मैंने इसके साथ रूट एक्सेस प्राप्त करने का एक तरीका ढूंढ लिया है। समाधान फ़ाइल नाम पर अग्रणी अवधि की मात्रा को एक तक सीमित करना है ताकि आप ../../etc/passwordसामान न कर सकें । gist.github.com/amejiarosario/53afae82e18db30dadc9bc39035778e5
Seph Reed

1
pathname = pathname.replace(/^(\.)+/, '.');
सिपाही रीड

79

NodeJS स्क्रिप्ट के भीतर से रन करने योग्य सर्वर चाहने वाले लोगों के लिए:

आप एक्सप्रेस / सेवा-स्थैतिक का उपयोग कर सकते हैं जो प्रतिस्थापित करता है connect.static(जो अब कनेक्ट 3 के रूप में उपलब्ध नहीं है):

myapp.js:

var http = require('http');

var finalhandler = require('finalhandler');
var serveStatic = require('serve-static');

var serve = serveStatic("./");

var server = http.createServer(function(req, res) {
  var done = finalhandler(req, res);
  serve(req, res, done);
});

server.listen(8000);

और फिर कमांड लाइन से:

  • $ npm install finalhandler serve-static
  • $ node myapp.js

1
FYI करें यह मेरे लिए काम नहीं किया। मैंने फ़ाइलहैंडलर का उपयोग करके इंस्टॉल किया npm install filehandlerऔर पैकेज को node_modulesनिर्देशिका में सूचीबद्ध किया गया है । लेकिन जब मैं myapp.jsनोड चलाता हूं तो एक त्रुटि कहती है Error: cannot find module filehandler। अगर मैं फ़ाइलहैंडलर को लोड करने के लिए स्टैस्टमेंट की आवश्यकता के बारे में टिप्पणी करता हूं, तो एप्लिकेशन सर्व-स्टैटिक को ठीक से लोड करता है, इसलिए ऐसा लगता है कि फाइलहैंडलर पैकेज में कुछ गड़बड़ है। आज १२ दिसंबर २०१४ है, इसलिए इस उत्तर के पोस्ट होने के बाद से शायद पैकेज बदल गया है?
ली जेनकिन्स

7
यह finalहैंडलर नहीं हैfile
jakub.g

इस समाधान का एक और लाभ है, फाइलें कैश नहीं की जाती हैं, इसलिए आपको कोड में परिवर्तन करते समय एक प्रक्रिया को पुनरारंभ करने की आवश्यकता नहीं है।
किल्लत

59

मुझे पता है कि यह नोड नहीं है, लेकिन मैंने पायथन के सिम्पल टीटीपीएसवर का उपयोग किया है:

python -m SimpleHTTPServer [port]

यह अच्छी तरह से काम करता है और पायथन के साथ आता है।


16
पायथन 3 समतुल्य: python -m http.server [port](उल्लिखित पाइथन 2 के लिए है)
jakub.g

पायथन मेरे लिए तब विफल हो जाता है जब यह ओएस छवियों जैसी बड़ी फ़ाइलों की सेवा के बारे में होता है। फेडोरा 23
जिमी

9
और PHP पर:php -S localhost:8000
डेनिस

मैं इसका उपयोग हर समय किसी फ़ोल्डर से सामग्री को जल्दी से करने के लिए करता हूं।
एड्रियन लिंच

33

कनेक्ट वह हो सकता है जो आप खोज रहे हैं।

आसानी से स्थापित:

npm install connect

तब सबसे बुनियादी स्थिर फ़ाइल सर्वर के रूप में लिखा जा सकता है:

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

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

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

4
यह अब कनेक्ट 3 के रूप में काम नहीं करता है क्योंकि यह उजागर नहीं करता है connect.static; एक प्रतिस्थापन के लिए नीचे दिए गए मेरे उत्तर को देखें
jakub.g

4
मेरा मानना ​​है कि यह अभी भी डिफ़ॉल्ट रूप से एक्सप्रेस के साथ बंडल है , लेकिन वास्तव में एक अलग requireसक्षम मॉड्यूल "सर्व-स्टैटिक" में मौजूद है।
ओलेग

18

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


1
नमस्ते, मैं इसे सही ढंग से चला सकता हूं, लेकिन यह दिखाता है Cannot GET /। मैं सर्वर को चलाने के लिए AWS EC2 का उपयोग करता हूं।
वी ज़िया

1
@Wei हाय, देर से जवाब। मैं एक त्वरित Google खोज से जो देख सकता हूं, वह ऐसा लगता है कि आपकी निर्देशिका संरचना गलत हो सकती है। आपके द्वारा लक्षित स्थान में एक index.html फ़ाइल होनी चाहिए। चलाने के लिए ऊपर के उदाहरण को सेट करने में 5 मिनट का समय लगना चाहिए और मैंने दोगुना चेक किया कि यह जैसा है वैसा ही काम करता है। वहां से आप अपनी निर्देशिका संरचना के अनुरूप पथ को चिह्नित कर सकते हैं और जांच सकते हैं कि सर्वर अभी भी उन फ़ाइलों को ढूँढता है जो इसे सर्वर को चाहिए।
pasx

path.join(__dirname, 'public')अधिक क्रॉस-प्लेटफ़ॉर्म है।
sdgfsdh

16

वादों के बजाय एक-पंक्ति ™ प्रमाण

यहाँ छवि विवरण दर्ज करें

पहला है http-server, hs- लिंक

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

दूसरा serveZEIT.co द्वारा है - लिंक

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

निम्नलिखित विकल्प उपलब्ध हैं, यदि यह वही है जो आपको तय करने में मदद करता है।

C: \ Users \ Qwerty> http-server --help
उपयोग: http-server [पथ] [विकल्प]

विकल्प:
  -p पोर्ट का उपयोग करने के लिए [8080]
  -ए पते का उपयोग करने के लिए [0.0.0.0]
  -d शो निर्देशिका लिस्टिंग [सच]
  -i प्रदर्शन ऑटोइंडेक्स [सच]
  gg - gzip जब संभव हो तो gzip फाइलें परोसें [झूठी]
  -ई - कस्टम डिफ़ॉल्ट फ़ाइल एक्सटेंशन यदि कोई भी आपूर्ति नहीं करता है [कोई भी]
  -s --silent आउटपुट से लॉग संदेश दबाएं
  --cors [= headers] "पहुंच-नियंत्रण-अनुमति-उत्पत्ति" शीर्षक के माध्यम से कॉर्स सक्षम करें
                     वैकल्पिक रूप से कॉर्स हेडर्स लिस्ट को कॉमा द्वारा अलग किया गया है
  -o [पथ] सर्वर शुरू करने के बाद ब्राउज़र विंडो खोलें
  -c कैश समय (अधिकतम आयु) सेकंड में [3600], जैसे -10 सेकंड 10 सेकंड के लिए।
               कैशिंग अक्षम करने के लिए, -c-1 का उपयोग करें।
  लॉग संदेशों में यूटीसी समय प्रारूप का उपयोग करें।

  यदि अनुरोध हल नहीं किया जा सकता है - - प्रॉक्सी प्रॉक्सीबैक प्रॉक्सी। जैसे: http://someurl.com

  -S --ssl सक्षम करें https।
  -सी - एसएसएल प्रमाणित फ़ाइल के लिए पथ (डिफ़ॉल्ट: cert.pem)।
  -K --key पथ ssl कुंजी फ़ाइल के लिए (डिफ़ॉल्ट: key.pem)।

  -r --robots / /robots.txt के जवाब [उपयोगकर्ता-एजेंट: * \ nDisallow: /]
  -h --help इस सूची को प्रिंट करें और बाहर निकलें।
C: \ Users \ Qwerty> सेवा --help

  उपयोग: serve.js [विकल्प] [कमांड]

  आदेश:

    मदद प्रदर्शन मदद

  विकल्प:

    -a, --auth बेसिक ऑर्ट के पीछे परोसें
    -c, - ब्राउज़र में कैशिंग फ़ाइलों के लिए मिलीसेकंड में समय कैश करें
    -n, --clipless क्लिपबोर्ड पर पता कॉपी न करें (डिफ़ॉल्ट रूप से अक्षम)
    -सी, -ऑर्स सेटअप * कॉर्स हेडर किसी भी मूल से अनुरोध करने की अनुमति देता है (डिफ़ॉल्ट रूप से अक्षम)
    -h, --help आउटपुट उपयोग जानकारी
    -i, --ignore फ़ाइलें और निर्देशिकाओं को अनदेखा करने के लिए
    -o, - ब्राउज़र में खुला स्थानीय पता (डिफ़ॉल्ट रूप से अक्षम)
    -p, --पोर्ट पोर्ट पर सुनने के लिए (चूक 5000 तक)
    -S, --silent कंसोल में कुछ भी लॉग न करें
    -s, --single एकल पृष्ठ अनुप्रयोग (सेट `-`` को 1 दिन परोसें)
    -t, - बेमतलब स्टैटिक्स ट्री प्रदर्शित न करें (डिफ़ॉल्ट रूप से अक्षम)
    -u, - अपंग GZIP संपीड़न अक्षम करें
    -v, --version आउटपुट संस्करण संख्या

यदि आपको परिवर्तनों के लिए देखने की आवश्यकता है, तो देखें hostr, क्रेडिट हेनरी त्सेंग का जवाब


14

केवल डेमो / प्रोमो सर्वर

यदि आपको इसकी आवश्यकता है, तो यह प्रयास करें:

const http = require('http');
const fs = require('fs');
const port = 3000;
const app = http.createServer((req,res) => {
    res.writeHead(200);
    if (req.url === '/') req.url = '/index.html'; // courtesy of @JosephCho
    res.end(fs.readFileSync(__dirname + req.url));
});

app.listen(port);

नोट: आपको अपने पते के भाग के रूप में "/index.html" का उपयोग करने की आवश्यकता है अर्थात " http: // localhost: 3000 / index.html "


2
सिंक संस्करण का उपयोग न करें। ReadStream से रिस करने के लिए पाइप बनाएं।
एडुआर्ड बोंडारेंको

1
सबसे अच्छा जवाब अगर आपको एक त्वरित और गंदे एक बार एक चाल टट्टू की आवश्यकता है।
collapsar

1
आप उपयोग कर से बचना चाहते हैं index.htmlआपके पते के हिस्से के रूप में सिर्फ जोड़ने if (req.url === '/') req.url = '/index.html';सही होने के बाद res.writeHead(200);
जोसेफ चॉ

3
@EduardBondarenko सही है। const stream = fs.createReadStream(...); stream.pipe(res);आप सभी की जरूरत है
जस्टिन Meiners

8

एक और स्थिर वेब सर्वर है जो काफी अच्छा है: ब्राउज़र-सिंक।

इसे नोड पैकेज मैनेजर का उपयोग करके डाउनलोड किया जा सकता है:

npm install -g browser-sync

स्थापना के बाद, cmd प्रॉम्प्ट में प्रोजेक्ट फ़ोल्डर में नेविगेट करें और बस निम्नलिखित चलाएँ:

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

यह ब्राउज़र में वर्तमान फ़ोल्डर में सभी फ़ाइलों को पूरा करना शुरू कर देगा।

BrowserSync से अधिक जानकारी प्राप्त की जा सकती है

धन्यवाद।


2
अन्य स्टैटिक सर्वरों की बजाय ब्राउजरसिंक का उपयोग करने का लाभ यह है कि यह पेज को तब भी अपडेट करता है जब --filesध्वज द्वारा निर्दिष्ट फाइलें बदल जाती हैं (nb। आपको यह निर्दिष्ट करने की आवश्यकता नहीं है ./*- केवल वे ही जिन्हें आप चाहते हैं कि ब्राउजरसुकेट सक्रिय रूप से अपडेट के लिए देखें, जैसे। । css/*.css)
निक एफ

7

मुझे इस पृष्ठ पर किसी भी उत्तर के साथ ज्यादा भाग्य नहीं मिला है, हालांकि, नीचे इस चाल को करना प्रतीत होता है।

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या npm install express --saveअपने सेटअप के आधार पर (मैं yarnयह बहुत तेजी से सिफारिश कर सकते हैं )।

आप distजो भी फ़ोल्डर में अपनी सामग्री परोस रहे हैं उसे बदल सकते हैं । अपने सरल प्रोजेक्ट के लिए, मैं किसी भी फ़ोल्डर से सेवा नहीं दे रहा था, इसलिए मैंने बस इसे हटा दियाdist फ़ाइल नाम ।

तब आप दौड़ सकते हैं node server.js। जैसा कि मुझे अपना प्रोजेक्ट एक हर्को सर्वर पर अपलोड करना था, मुझे अपनी package.jsonफ़ाइल में निम्न जोड़ना होगा :

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

6

यदि आप एक्सप्रेस फ्रेमवर्क का उपयोग करते हैं , तो यह कार्यक्षमता जाने के लिए तैयार है।

एक साधारण फ़ाइल सर्विंग ऐप को सेटअप करने के लिए बस यही करें:

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

क्या मैं $ npm स्थापित -g एक्सप्रेस कर सकता हूं; उन्हें $ एक्सप्रेस?
पॉल वेरेस्ट

मैंने आपके चरणों का पालन किया, लेकिन मेरे एक्सप्रेस में बिन फ़ोल्डर नहीं है
क्वर्टी

6

यहाँ मेरी एक-फ़ाइल / लाइटवेट नोड है। बिना किसी पर निर्भरता के साथ स्थिर फ़ाइल वेब-सर्वर पालतू प्रोजेक्ट, जो मेरा मानना ​​है कि एक त्वरित और समृद्ध उपकरण है, जिसका उपयोग आपके लिनक्स / यूनिक्स / मैकओएस टर्मिनल पर इस कमांड को जारी करने में उतना ही आसान है ( या Android पर टर्मक्स ) जब नोड। js (या nodejs-legacyडेबियन / उबंटू पर) स्थापित किया गया है:

curl pad.js.org | node 

(प्रलेखन पर विंडोज उपयोगकर्ताओं के लिए विभिन्न कमांड मौजूद हैं)

यह विभिन्न चीजों का समर्थन करता है जो मुझे विश्वास है कि उपयोगी पाया जा सकता है,

  • पदानुक्रमित निर्देशिका सूचकांक निर्माण / सेवारत
    • विभिन्न मानदंडों पर क्षमता के साथ
    • क्रोम, फ़ायरफ़ॉक्स और अन्य ब्राउज़रों पर [मल्टी-फ़ाइल] ड्रैग-एंड-ड्रॉप और फ़ाइल / टेक्स्ट-ओनली कॉपी-पेस्ट और सिस्टम क्लिपबोर्ड स्क्रीन-शॉट पेस्ट द्वारा अपलोड करें, कुछ सीमाओं के साथ हो सकते हैं (जिन्हें कमांड लाइन द्वारा बंद किया जा सकता है विकल्प यह प्रदान करता है)
    • फ़ोल्डर / नोट-निर्माण / अपलोड बटन
  • अच्छी तरह से ज्ञात फ़ाइल प्रकारों के लिए सही MIMEs की सेवा (अक्षम करने की संभावना के साथ)
  • एक npm पैकेज और स्थानीय उपकरण के रूप में स्थापना की संभावना या, डॉकर के साथ एक स्थायी सेवा के रूप में एक-रैखिक स्थापना
  • HTTP 206 फ़ाइल तेजी से स्थानान्तरण के लिए सेवारत (मल्टीपार्ट फ़ाइल स्थानांतरण)
  • टर्मिनल और ब्राउज़र कंसोल से अपलोड (वास्तव में यह मूल रूप से अन्य पृष्ठों / डोमेन पर ब्राउज़रों के जेएस कंसोल के लिए फ़ाइल-सिस्टम प्रॉक्सी होने का इरादा था)
  • कोर डाउनलोड / अपलोड (जिसे बंद भी किया जा सकता है)
  • आसान HTTPS एकीकरण
  • इसके साथ बेहतर सुरक्षित सेवा प्राप्त करने के लिए लाइटवेट कमांड लाइन विकल्प:
    • नोड.जेएस 8 पर मेरे पैच के साथ , आप पहली स्थापना के बिना विकल्पों तक पहुंच सकते हैं:curl pad.js.org | node - -h
    • या पहले इसे सिस्टम-ग्लोबल npm पैकेज के रूप में [sudo] npm install -g pad.jsस्थापित करें और फिर इसके विकल्पों तक पहुँच के लिए इसके स्थापित संस्करण का उपयोग करें:pad -h
    • या प्रदान की गई डॉकर छवि का उपयोग करें जो डिफ़ॉल्ट रूप से अपेक्षाकृत सुरक्षित विकल्प का उपयोग करता है। [sudo] docker run --restart=always -v /files:/files --name pad.js -d -p 9090:9090 quay.io/ebraminio/pad.js

टूल का उपयोग करके एक फ़ोल्डर इंडेक्स का स्क्रीनशॉट

ऊपर वर्णित सुविधाओं को ज्यादातर http://pad.js.org टूल के मुख्य पृष्ठ पर प्रलेखित किया जाता है, जिसका उपयोग मैंने कुछ अच्छी चाल से किया है, यह वह स्थान है जहाँ से टूल स्रोत भी स्वयं परोसा जाता है!

उपकरण स्रोत GitHub पर है जो आपकी प्रतिक्रिया, सुविधा अनुरोधों और G का स्वागत करता है!


5

Npm@5.2.0 से, npmसामान्य npm नामक एक नए बाइनरी को स्थापित करना शुरू किया npx। तो अब, मौजूदा निर्देशिका से स्थिर http सर्वर बनाने के लिए एक लाइनर:

npx serve

या

npx http-server

4

नोड का उपयोग कर निश्चित संसाधनों की सेवा के लिए प्रदर्शन का एक स्वस्थ वृद्धि के लिए, मैं उपयोग करने की अनुशंसा बुफे । यह वेब एप्लिकेशन त्वरक के रूप में भी काम करता है जिसे कैशिंग एचटीटीपी रिवर्स प्रॉक्सी के रूप में भी जाना जाता है लेकिन यह केवल चुने हुए निर्देशिका को मेमोरी में लोड करता है।

बफ़ेट पूरी तरह से बफ़रेड दृष्टिकोण लेता है - जब आपके ऐप बूट होते हैं, तो सभी फाइलें पूरी तरह से मेमोरी में लोड हो जाती हैं, इसलिए आप कभी भी फाइलसिस्टम के जलने का एहसास नहीं करेंगे। व्यवहार में, यह बेहद कुशल है। इतना तो है कि वार्निश को आपके ऐप के सामने रखने से यह धीमा भी हो सकता है! 

हम इसे कोडपील साइट पर उपयोग करते हैं और एक पेज पर 25k डाउनलोड करने वाले पेज पर ~ 700requests / sec की वृद्धि को देखते हुए 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');

});

4

उस लिंक पर एक नज़र डालें ।

आप के व्यक्त मॉड्यूल स्थापित करने के लिए केवल जरूरत है node js

var express = require('express');
var app = express();

app.use('/Folder', express.static(__dirname + '/Folder'));

आप अपनी फाइल को http: //hostname/Folder/file.zip जैसे एक्सेस कर सकते हैं


4

नीचे मेरे लिए काम किया:

app.jsनीचे दी गई सामग्री के साथ एक फ़ाइल बनाएँ :

// app.js

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

http.createServer(function (req, res) {
  fs.readFile(__dirname + req.url, function (err,data) {
    if (err) {
      res.writeHead(404);
      res.end(JSON.stringify(err));
      return;
    }
    res.writeHead(200);
    res.end(data);
  });
}).listen(8080);

index.htmlनीचे दी गई सामग्री के साथ एक फ़ाइल बनाएँ :

Hi

एक कमांड लाइन शुरू करें:

cmd

नीचे चलाएं cmd:

node app.js

क्रोम में URL के नीचे गोटो:

http://localhost:8080/index.html

बस इतना ही। उम्मीद है की वो मदद करदे।

स्रोत: https://nodejs.org/en/knowledge/HTTP/servers/how-to-serve-static-files/


3

आप मेरी सेवा कर सकते हैं

इसका उपयोग करना इतना आसान है:

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

बस इतना ही।

पीडी: डिफ़ॉल्ट रूप से परोसा गया फ़ोल्डर "सार्वजनिक" है।


3

यहाँ एक और सरल वेब सर्वर है।

https://www.npmjs.com/package/hostr

इंस्टॉल

npm install -g hostr

काम कर रहे निर्देशक को बदलें

cd myprojectfolder/

और शुरू करो

hostr

यह परिवर्तनों के लिए भी देखता है और लाइव पुनः लोड प्रदान करता है।
क्वर्टी

3

सादे नोड में ।js:

const http = require('http')
const fs = require('fs')
const path = require('path')

process.on('uncaughtException', err => console.error('uncaughtException', err))
process.on('unhandledRejection', err => console.error('unhandledRejection', err))

const publicFolder = process.argv.length > 2 ? process.argv[2] : '.'
const port = process.argv.length > 3 ? process.argv[3] : 8080

const mediaTypes = {
  zip: 'application/zip',
  jpg: 'image/jpeg',
  html: 'text/html',
  /* add more media types */
}

const server = http.createServer(function(request, response) {
  console.log(request.method + ' ' + request.url)

  const filepath = path.join(publicFolder, request.url)
  fs.readFile(filepath, function(err, data) {
    if (err) {
      response.statusCode = 404
      return response.end('File not found or you made an invalid request.')
    }

    let mediaType = 'text/html'
    const ext = path.extname(filepath)
    if (ext.length > 0 && mediaTypes.hasOwnProperty(ext.slice(1))) {
      mediaType = mediaTypes[ext.slice(1)]
    }

    response.setHeader('Content-Type', mediaType)
    response.end(data)
  })
})

server.on('clientError', function onClientError(err, socket) {
  console.log('clientError', err)
  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
})

server.listen(port, '127.0.0.1', function() {
  console.log('👨‍🔧 Development server is online.')
})

यह एक सरल नोड.जेएस सर्वर है जो केवल एक निश्चित निर्देशिका में अनुरोधित फ़ाइलों को कार्य करता है।

उपयोग:

node server.js folder port

folderserver.jsस्थान के आधार पर निरपेक्ष या सापेक्ष हो सकता है । डिफ़ॉल्ट मान वह है .जो वह निर्देशिका है जिसे आप node server.jsकमांड निष्पादित करते हैं ।

port डिफ़ॉल्ट रूप से 8080 है, लेकिन आप अपने OS में उपलब्ध किसी भी पोर्ट को निर्दिष्ट कर सकते हैं।

आपके मामले में, मैं करूंगा:

cd D:\Folder
node server.js

आप D:\Folderएक ब्राउजर से फाइल टाइप करके ब्राउज कर सकते हैंhttp://127.0.0.1:8080/somefolder/somefile.html


2

यह अभी तक एनपीएम पर नहीं है, लेकिन मैंने एक्सप्रेस पर एक साधारण स्टैटिक सर्वर बनाया है, जो आपको फॉर्म सबमिशन स्वीकार करने और एक ट्रांसेक्शनल ईमेल सेवा (अब के लिए प्रेषित, मैंड्रिल आने) के माध्यम से ईमेल करने की अनुमति देता है।

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


2

खोजकर्ताओं के लाभ के लिए, मुझे जकुब जी का उत्तर पसंद आया, लेकिन थोड़ी त्रुटि से निपटने की इच्छा थी। जाहिर है कि त्रुटियों को ठीक से संभालना सबसे अच्छा है , लेकिन यह एक साइट को रोकने में मदद करना चाहिए अगर कोई त्रुटि होती है। नीचे कोड:

var http = require('http');
var express = require('express');

process.on('uncaughtException', function(err) {
  console.log(err);
});

var server = express();

server.use(express.static(__dirname));

var port = 10001;
server.listen(port, function() { 
    console.log('listening on port ' + port);     
    //var err = new Error('This error won't break the application...')
    //throw err
});

अद्यतन - मेरा उत्तर काम करता है, लेकिन मैं अब http-सर्वर का उपयोग करते हुए @Matt Self के उत्तर का उपयोग करता हूं। ऐसा लगता है कि यह अच्छा काम कर रहा है।
हॉकी

2

पहले npm install node-static -g -गैस -स्टैटिक सर्वर को स्थापित करें -g के माध्यम से इसे अपने सिस्टम पर वैश्विक रूप से स्थापित करना है, फिर उस निर्देशिका में नेविगेट करें जहां आपकी फाइलें स्थित हैं, static इसके साथ सर्वर शुरू करें पोर्ट 8080 पर सुनता है, ब्राउजर के लिए नेवीगेट और लोकलहोस्ट टाइप करें: 8080 / ahtmlfilename ।


2

आप एनपीएम सर्व का उपयोग कर सकते हैं पैकेज का , अगर आपको NodeJS सामान की आवश्यकता नहीं है तो यह एक त्वरित और आसान उपकरण है:

1 - अपने पीसी पर पैकेज स्थापित करें:

npm install -g serve

2 - अपने स्थिर फ़ोल्डर की सेवा करें serve <path>:

d:> serve d:\StaticSite

यह आपको दिखाएगा कि आपका स्टैटिक फ़ोल्डर किस पोर्ट पर परोसा जा रहा है, जैसे होस्ट पर नेविगेट करें:

http://localhost:3000

आपको पता है कि npmनोड पैकेज मैनेजर है इसलिए आप वास्तव में NodeJS सामान का उपयोग कर रहे हैं
derickito

मैं करता हूं, "NodeJS सामान" के रूप में मेरा क्या मतलब था, NodeJS का उपयोग कर रहा था और अधिकांश उत्तर सुझाए गए फाइलों की तरह सेवा करने के लिए व्यक्त करता था। सर्व एक स्वतंत्र निष्पादन योग्य है, इसे स्थापित करने के लिए एनपीएम का उपयोग किया जाता है, आप इसे सीधे डाउनलोड कर सकते हैं।
डिएगो मेंडेस

1

NPM रजिस्ट्री में खोज https://npmjs.org/search?q=server , मैंने स्थैतिक-सर्वर https://github.com/maelstrom/static-server पाया है

कभी किसी सहकर्मी को फाइल भेजने की जरूरत होती है, लेकिन 100 एमबी के जानवर को ईमेल करने पर परेशान नहीं किया जा सकता है? एक साधारण उदाहरण जावास्क्रिप्ट अनुप्रयोग चलाना चाहते थे, लेकिन फ़ाइल के माध्यम से इसे चलाने में समस्याएँ थीं: /// प्रोटोकॉल? सांबा, या एफ़टीपी स्थापित करने के लिए एक लैन पर अपनी मीडिया निर्देशिका साझा करना चाहता था, या कुछ और आपको कॉन्फ़िगरेशन फ़ाइलों को संपादित करने की आवश्यकता है? फिर यह फ़ाइल सर्वर आपके जीवन को थोड़ा आसान बना देगा।

सरल स्थिर सामान सर्वर को स्थापित करने के लिए, npm का उपयोग करें:

npm install -g static-server

फिर एक फ़ाइल या एक निर्देशिका की सेवा करने के लिए, बस चलाएं

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

यहां तक ​​कि फ़ोल्डर सामग्री को भी सूचीबद्ध किया जा सकता है।

दुर्भाग्य से, यह फ़ाइलों की सेवा नहीं कर सका :)


5
मैंने वह सर्वर बनाया। वह फ़ाइल सर्वर नोड के एक बहुत पुराने संस्करण के खिलाफ बनाया गया था , इसलिए यह किसी भी अधिक काम नहीं करता है। इसे ठीक करने के लिए मेरे पास अभी समय नहीं है। मैं @Oleg द्वारा उत्तर का उपयोग करने का सुझाव देता हूं। यह आसानी से एक छोटे नोड निष्पादन योग्य में बांधा जा सकता है, और अनिवार्य रूप से मेरा वैसे भी क्या था।
टिम हीप

धन्यवाद टिम, बहुत ही पेशेवर प्रतिक्रिया। हालांकि मैं कोड नहीं हटाऊंगा, लेकिन रीडमी को अपडेट करूंगा।
पॉल वेरेस्ट



1

const http = require('http');
const fs = require('fs');
const url = require('url');
const path = require('path');


let mimeTypes = {
  '.html': 'text/html',
  '.css': 'text/css',
  '.js': 'text/javascript',
  '.jpg': 'image/jpeg',
  '.png': 'image/png',
  '.ico': 'image/x-icon',
  '.svg': 'image/svg+xml',
  '.eot': 'appliaction/vnd.ms-fontobject',
  '.ttf': 'aplication/font-sfnt'
};



http.createServer(function (request, response) {
  let pathName = url.parse(request.url).path;
  if(pathName === '/'){
    pathName = '/index.html';
  }
  pathName = pathName.substring(1, pathName.length);
  let extName = path.extName(pathName);
  let staticFiles = `${__dirname}/template/${pathName}`;

      if(extName =='.jpg' || extName == '.png' || extName == '.ico' || extName == '.eot' || extName == '.ttf' || extName == '.svg')
      {
          let file = fr.readFileSync(staticFiles);
          res.writeHead(200, {'Content-Type': mimeTypes[extname]});
          res.write(file, 'binary');
          res.end();
      }else {
        fs.readFile(staticFiles, 'utf8', function (err, data) {
          if(!err){
            res.writeHead(200, {'Content-Type': mimeTypes[extname]});
            res.end(data);
          }else {
            res.writeHead(404, {'Content-Type': 'text/html;charset=utf8'});
            res.write(`<strong>${staticFiles}</strong>File is not found.`);
          }
          res.end();
        });
      }
}).listen(8081);


आपको इस कोड के साथ कुछ स्पष्टीकरण जोड़ना चाहिए।
अभिनव गुनियाल

1

यदि आप किसी भी पूर्वापेक्षा के बिना अल्ट्रा-लाइट http सर्वर में इंट्रेस्टेड हैं, तो आपको इस पर एक नज़र रखना चाहिए: mongoose


0

मैं काम पर और व्यक्तिगत परियोजनाओं के लिए ह्यूस्टन का उपयोग करता हूं, यह मेरे लिए अच्छा काम करता है।

https://github.com/alejandro/Houston


0

आपने यह भी पूछा कि अनुरोध क्यों छोड़ रहे हैं - यह सुनिश्चित नहीं करें कि आपके मामले में विशिष्ट कारण क्या है, लेकिन कुल मिलाकर आप समर्पित मिडलवेयर (nginx, S3, CDN) का उपयोग करते हुए बेहतर सर्वर स्टैटिक कंटेंट हैं क्योंकि नोड वास्तव में इस नेटवर्किंग पैटर्न के लिए अनुकूलित नहीं है। यहां और स्पष्टीकरण देखें (बुलेट 13): http://goldbergyoni.com/checklist-best-reat-of-node-js-in-production/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.