සරල වෙබ් සේවාදායකයක් ලෙස node.js භාවිතා කිරීම


1119

මට ඉතා සරල HTTP සේවාදායකයක් ධාවනය කිරීමට අවශ්‍යයි. සෑම ලබා ගන්න ඉල්ලීමක් example.comවිය යුතු index.htmlඑය නොව සාමාන්ය HTML පිටුව (ඔබ කියවන විට සාමාන්ය වෙබ් පිටු, එනම්, එම අත්දැකීම්) ලෙස ද කටයුතු කළේය.

පහත කේතය භාවිතා කිරීමෙන් මට අන්තර්ගතය කියවිය හැකිය index.html. index.htmlසාමාන්‍ය වෙබ් පිටුවක් ලෙස මා සේවය කරන්නේ කෙසේද ?

var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end(index);
}).listen(9615);

පහත දැක්වෙන එක් යෝජනාවක් සංකීර්ණ වන අතර මට භාවිතා කිරීමට අවශ්‍ය getසෑම සම්පතක්ම (CSS, JavaScript, images) ගොනුවක් සඳහා රේඛාවක් ලිවීමට අවශ්‍ය වේ.

සමහර පින්තූර, CSS සහ JavaScript සහිත තනි HTML පිටුවකට මා සේවය කරන්නේ කෙසේද?


21
Npm මොඩියුලය "සම්බන්ධ කරන්න" දෙස බලන්න. එය එවැනි මූලික ක්‍රියාකාරිත්වයක් සපයන අතර බොහෝ සැකසුම් සහ වෙනත් පැකේජවල පදනම වේ.
මරේ

5
ඔබ ඔබේ විසඳුම පිළිතුරක් ලෙස තබා එය නිවැරදි ලෙස සලකුණු කළ යුතුය.
graham.reeds

8
මම කතා එරික් බී Sowell විසින් පරිපූර්ණ විසඳුමක් සොයා ගැනීමට හැකි විය node එකක් මතම ඊට අදාල JS සිට ස්ථිතික ගොනු සේවය . මුළු දේම කියවන්න. බෙහෙවින් නිර්දේශිතයි.
idophir

1
Cachemere නමින් මා ලියූ මොඩියුලයක් දෙස බලන්න. එය ඔබගේ සියලු සම්පත් ස්වයංක්‍රීයව හැඹිලි කරයි. github.com/topcloud/cachemere
ජෝන්

1
දේශීය-වෙබ්-සේවාදායකය බැලීමට හොඳ උදාහරණයකි
ලොයිඩ්

Answers:


1009

සරලම Node.js සේවාදායකය නිකම්ම:

$ npm install http-server -g

දැන් ඔබට පහත දැක්වෙන විධානයන් හරහා සේවාදායකයක් ධාවනය කළ හැකිය:

$ cd MyApp

$ http-server

ඔබ NPM 5.2.0 හෝ නව භාවිතා කරන්නේ නම්, ඔබට http-serverඑය ස්ථාපනය නොකර භාවිතා කළ හැකිය npx. නිෂ්පාදනයේ භාවිතය සඳහා මෙය නිර්දේශ කර නැති නමුත් localhost මත සේවාදායකයක් ඉක්මනින් ලබා ගැනීමට මෙය හොඳ ක්‍රමයකි.

$ npx http-server

නැතහොත්, ඔබට මෙය උත්සාහ කළ හැකිය, එය ඔබේ වෙබ් බ්‍රව්සරය විවෘත කර CORS ඉල්ලීම් සක්‍රීය කරයි:

$ http-server -o --cors

තවත් විකල්ප සඳහා, GitHub හි ප්‍රලේඛනයhttp-server බලන්න , නැතහොත් ධාවනය කරන්න:

$ http-server --help

තවත් බොහෝ හොඳ ලක්ෂණ සහ මොළයෙන් මියගිය-සරල ලෙස NodeJitsu වෙත යෙදවීම.

විශේෂාංග ෆෝක්ස්

ඇත්ත වශයෙන්ම, ඔබට ඔබේම දෙබලකින් පහසුවෙන් ලක්ෂණ ඉහළට ඔසවා තැබිය හැකිය. මෙම ව්‍යාපෘතියේ දැනට පවතින 800+ දෙබලක දැනටමත් එය සිදු කර ඇති බව ඔබට පෙනී යනු ඇත:

සැහැල්ලු සේවාදායකය: ස්වයංක්‍රීය ප්‍රබෝධමත් විකල්පයක්

ලස්සන විකල්ප http-serverකියන්නේ light-server. එය ගොනු නැරඹීම සහ ස්වයංක්‍රීයව නැවුම්බව සහ තවත් බොහෝ විශේෂාංග සඳහා සහාය වේ.

$ npm install -g light-server 
$ light-server

වින්ඩෝස් එක්ස්ප්ලෝරර් හි ඔබගේ නාමාවලි සන්දර්භය මෙනුවට එක් කරන්න

 reg.exe add HKCR\Directory\shell\LightServer\command /ve /t REG_EXPAND_SZ /f /d "\"C:\nodejs\light-server.cmd\" \"-o\" \"-s\" \"%V\""

සරල JSON REST සේවාදායකය

මූලාකෘති ව්‍යාපෘතියක් සඳහා ඔබට සරල REST සේවාදායකයක් සෑදීමට අවශ්‍ය නම් json-server ඔබ සොයන දේ විය හැකිය.

ස්වයංක්‍රීය නැවුම් සංස්කාරක

බොහෝ වෙබ් පිටු සංස්කාරකවරුන්ට සහ IDE මෙවලම් වලට දැන් ඔබේ වෙබ් ලිපිගොනු ඇතුළත් වන අතර එය ඔබේ මූලාශ්‍ර ලිපිගොනු නරඹන අතර ඒවා වෙනස් වන විට ඔබේ වෙබ් පිටුව ස්වයංක්‍රීයව නැවුම් කරයි.

මම දෘශ්‍ය ස්ටුඩියෝ කේතය සමඟ සජීවී සේවාදායකය භාවිතා කරමි .

මෙම විවෘත මූලාශ්ර පෙළ සකසනය වරහන් ද NodeJS ස්ථිතික වෙබ් සේවාදායකය ඇතුළත් වේ. ඕනෑම HTML ගොනුවක් වරහන් තුළ විවෘත කර " සජීවී පෙරදසුන " ඔබන්න, එය ස්ථිතික සේවාදායකයක් ආරම්භ කර පිටුවේ ඔබේ බ්‍රව්සරය විවෘත කරයි. ඔබ HTML ගොනුව සංස්කරණය කර සුරකින සෑම විටම බ්‍රව්සරය ස්වයංක්‍රීයව නැවුම් කරයි. අනුවර්තී වෙබ් අඩවි පරීක්ෂා කිරීමේදී මෙය විශේෂයෙන් ප්‍රයෝජනවත් වේ. ඔබගේ HTML පිටුව බහු බ්‍රව්සර් / කවුළු ප්‍රමාණ / උපාංග මත විවෘත කරන්න. ඔබගේ HTML පිටුව සුරකින්න සහ ඒවා සියල්ලම ස්වයංක්‍රීයව නැවුම් වන විට ඔබේ අනුවර්තන දේවල් ක්‍රියාත්මක වේදැයි ක්ෂණිකව බලන්න .

PhoneGap සංවර්ධකයින්

ඔබ දෙමුහුන් ජංගම යෙදුමක් කේතනය කරන්නේ නම් , ෆෝන්ගෑප් කණ්ඩායම ඔවුන්ගේ නව දුරකථන ගැප් යෙදුම සමඟ මෙම ස්වයංක්‍රීය නැවුම් කිරීමේ සංකල්පය ගෙන ඇති බව දැන ගැනීමට ඔබ උනන්දු විය හැකිය . මෙය සාමාන්‍ය ජංගම යෙදුමක් වන අතර එය සංවර්ධනයේදී සේවාදායකයකින් HTML5 ගොනු පැටවිය හැකිය. ඔබ JS / CSS / HTML ලිපිගොනු වෙනස් කරන්නේ නම් දෙමුහුන් ජංගම යෙදුම් සඳහා ඔබේ සංවර්ධන චක්‍රයේ මන්දගාමී සම්පාදනය / යෙදවීමේ පියවර මඟ හැරිය හැකි බැවින් මෙය ඉතා සූක්ෂම උපක්‍රමයකි - ඔබ බොහෝ විට කරන්නේ එයයි. phonegap serveගොනු වෙනස්වීම් හඳුනාගන්නා ස්ථිතික NodeJS වෙබ් සේවාදායකය (ධාවනය ) ද ඔවුන් සපයයි .

PhoneGap + Sencha Touch Developers

මම දැන් සෙන්චා ස්පර්ශ සහ jQuery ජංගම දුරකථන සංවර්ධකයින් සඳහා PhoneGap ස්ථිතික සේවාදායකය සහ PhoneGap සංවර්ධක යෙදුම පුළුල් ලෙස අනුවර්තනය කර ඇත්තෙමි. සෙන්චා ස්පර්ශ සජීවීව එය පරීක්ෂා කරන්න . ඔබගේ ස්ථිතික සේවාදායකය ඔබේ ඩෙස්ක්ටොප් පරිගණකයේ සිට ඔබගේ ෆයර්වෝලයෙන් පිටත URL එකකට ප්‍රොක්සි කරන --qr QR කේත සහ --localtunnel සඳහා සහය දක්වයි! භාවිත ටොන්. දෙමුහුන් ජංගම උපාංග සඳහා දැවැන්ත වේගවත් කිරීම.

කෝර්ඩෝවා + අයනික රාමු සංවර්ධකයින්

දේශීය සේවාදායකය සහ ස්වයංක්‍රීයව නැවුම් කිරීමේ අංගයන් ionicමෙවලම තුළට පුලුස්සනු ලැබේ . ionic serveඔබගේ යෙදුම් ෆෝල්ඩරයෙන් ධාවනය කරන්න. ඊටත් වඩා හොඳයි ... ionic serve --labiOS සහ ඇන්ඩ්‍රොයිඩ් යන දෙඅංශයේම ස්වයංක්‍රීයව නැවුම්බව බැලීමට.


9
npm install live-server -g ඔබට එකම දේ අවශ්‍ය නම්, නමුත් ගොනු වෙනසක්

3
එක් කුඩා "ගොචා" -. http-server පෙරනිමියෙන් 0.0.0.0 හි වෙබ් අඩවියට සේවය කිරීම. එබැවින්, දේශීය පරීක්ෂණ සේවකයෙකු ලෙස නිසි ලෙස ක්‍රියා කිරීම සඳහා ඔබ IP ලිපිනයක් සඳහන් කළ යුතුය:http-server -a localhost
JESii

1
ඔව් ... 0.0.0.0 මඟින් එය ඔබගේ සියලු අයිපී ජාලගත උපාංගවල (වයිෆයි, කේබල්, බ්ලූටූත්) සියලුම අයිපී සමඟ බැඳීමට සලස්වන අතර එය ඕනෑම පොදු ජාලයක නරක අදහසක් වන අතර එය ඔබට අනවසරයෙන් ඇතුළුවීමට ඉඩ ඇත. අනෙක් අයට පෙන්වීමට හෝ එකම ජාලයක ඇති ඔබගේ ජංගම උපාංගයට සම්බන්ධ කිරීමට ආරක්ෂිත ගිනි පවුරක් තුළ ඔබේ යෙදුම නිරූපණය කිරීමට ඔබට අවශ්‍ය නම් එය එතරම් නරක නැත.
ටෝනි ඕ හගන්

ඇත්තෙන්ම ප්‍රයෝජනවත් කුඩා මෙවලමක්. මගේ සේවාදායකයේ බොහෝ නෝඩ් යෙදුම් ක්‍රියාත්මක වන බැවින් 8080 හැර වෙනත් වරායක් තෝරා ගැනීමට මම "-p" විකල්පයක් එක් කරමි. උදාහරණයක් ලෙස: nohup http-server -p 60080 & (එය පසුබිමෙන් ආරම්භ කර ඔබට විසන්ධි කිරීමට ඉඩ දෙයි shell සැසිය.) ඔබ වරාය ලෝකයට විවෘතව ඇති බවට වග බලා ගත යුතුය, උදා: iptables -I INPUT 1 -p tcp --dport 60090 -j ACCEPT (බොහෝ ලිනක්ස් පද්ධතිවල)
බ්ලිස්ටර්පීනට්ස්

එය සේවාවක් ලෙස ක්‍රියාත්මක කරන්නේ කෙසේද, එබැවින් විධාන විමසුම වසා දැමීමෙන් පවා මට එය භාවිතා කළ හැකිය. මෙය නොමැති නම් මෙම මෙවලම සපයන කිසියම් මෙවලමක් තිබේද?
සන්දීප් වැලි

989

මේ සඳහා ඔබට Node.js සමඟ Connect සහ ServeStatic භාවිතා කළ හැකිය :

  1. එන්පීඑම් සමඟ සම්බන්ධක සහ සේවා ස්ථිතික ස්ථාපනය කරන්න

    $ npm install connect serve-static
  2. මෙම අන්තර්ගතය සමඟ server.js ගොනුව සාදන්න:

    var connect = require('connect');
    var serveStatic = require('serve-static');
    
    connect()
        .use(serveStatic(__dirname))
        .listen(8080, () => console.log('Server running on 8080...'));
  3. Node.js සමඟ ධාවනය කරන්න

    $ node server.js

ඔබට දැන් යා හැකිය http://localhost:8080/yourfile.html


24
අධ්‍යාපනික හේතූන් මත පවත්නා පුස්තකාලයක් භාවිතා නොකිරීමේ අදහස විය, නමුත් එක්ස්ප්‍රස් භාවිතා කිරීම එහි පහළ මට්ටමේ අනුවාදය වන කනෙක්ට් වලට වඩා හොඳ උපදෙස් යැයි මම සිතමි.
idophir

136
ස්ථිතික ගොනුවට සේවය කරන එක්ස්ප්‍රස් හි කොටස සම්බන්ධ කිරීම පමණි, එබැවින් ස්ථිතික ලිපිගොනු සේවය සඳහා එක්ස්ප්‍රස් භාවිතා කිරීමට හේතුව මට නොපෙනේ. නමුත් ඔව්, එක්ස්ප්‍රස් ද එම කාර්යය කරනු ඇත.
ගියන් මාකෝ

7
විශිෂ්ට උපදෙස්. ඉහත පියවර මගේ අරමුණු සඳහා ඉතා හොඳින් ක්‍රියාත්මක විය. ජියන්ට ස්තූතියි, එක්ස්ප්‍රස් වෙත සබැඳිය එය සම්බන්ධ කර ඇති බව හෙළි කරයි, expressjs.com එක්ස්ප්‍රස් භාවිතා කරන ආකාරය මෙන්න: expressjs.com/guide.html
ජැක් ස්ටෝන්

10
මා වෙනුවෙන් වැඩ නොකිරීම, ප්‍රති result ලය ලබා ගත නොහැක /test.html. මම __dirname නාමාවලි නාමයකින් ආදේශ කළ යුතුද?
ටිමෝ

3
දැන්, සම්බන්ධතාවය 3 වන අනුවාදයට වෙනස් කර ඇත. එබැවින්, මිකිඩ් විස්තර කර ඇති පරිදි යමෙකුට සර්විස්-ස්ථිතික භාවිතා කළ යුතුය. V3 සම්බන්ධ කිරීම සඳහා මම සම්පූර්ණ කේතයක් සහිත තවත් පිළිතුරක් පළ කළෙමි.
tomet

163

මෙම සාරාංශය බලන්න . යොමු කිරීම සඳහා මම එය මෙහි ප්‍රතිනිෂ්පාදනය කරමි, නමුත් සාරාංශය නිරන්තරයෙන් යාවත්කාලීන කර ඇත.

Node.JS ස්ථිතික ගොනු වෙබ් සේවාදායකය. ඕනෑම නාමාවලියක සේවාදායකයන් ගිනි තැබීම සඳහා ඔබේ මාවතෙහි තබන්න, විකල්ප වරාය තර්කයක් ගනී.

var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs"),
    port = process.argv[2] || 8888;

http.createServer(function(request, response) {

  var uri = url.parse(request.url).pathname
    , filename = path.join(process.cwd(), uri);

  fs.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, {"Content-Type": "text/plain"});
      response.write("404 Not Found\n");
      response.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) filename += '/index.html';

    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }

      response.writeHead(200);
      response.write(file, "binary");
      response.end();
    });
  });
}).listen(parseInt(port, 10));

console.log("Static file server running at\n  => http://localhost:" + port + "/\nCTRL + C to shutdown");

යාවත්කාලීන කරන්න

සාරාංශය css සහ js ගොනු හසුරුවයි. මම එය මා විසින්ම භාවිතා කර ඇත. "ද්විමය" ආකාරයෙන් කියවීම / ලිවීම ගැටළුවක් නොවේ. එයින් අදහස් වන්නේ ගොනුව ලිපිගොනු පුස්තකාලය විසින් පෙළ ලෙස අර්ථ නිරූපණය නොකරන අතර ප්‍රතිචාරයේ අන්තර්ගත අන්තර්ගතයට සම්බන්ධ නොවන බවයි.

ඔබගේ කේතයේ ඇති ගැටළුව නම් ඔබ සැමවිටම අන්තර්ගතයේ "පෙළ / සරල" ය. ඉහත කේතය කිසිදු අන්තර්ගත වර්ගයක් ලබා නොදේ, නමුත් ඔබ එය HTML, CSS, සහ JS සඳහා භාවිතා කරන්නේ නම්, බ්‍රව්සරයකට ඒවා මනාව අනුමාන කළ හැකිය. කිසිදු අන්තර්ගත වර්ගයක් වැරදි එකකට වඩා හොඳ නැත.

සාමාන්‍යයෙන් අන්තර්ගත වර්ගය ඔබේ වෙබ් සේවාදායකයේ වින්‍යාසයකි. එබැවින් මෙය ඔබගේ ගැටලුව විසඳන්නේ නැතිනම් මට කණගාටුයි , නමුත් එය සරල සංවර්ධන සේවාදායකයක් ලෙස මා වෙනුවෙන් වැඩ කළ අතර එය වෙනත් පුද්ගලයින්ට උදව් වනු ඇතැයි සිතුවා. ප්‍රතිචාරයේදී ඔබට නිවැරදි අන්තර්ගත වර්ග අවශ්‍ය නම්, එක්කෝ ඔබට ඒවා ජොයිට්විඩල් ලෙස පැහැදිලිව අර්ථ දැක්විය යුතුය, නැතහොත් සංවේදී පෙරනිමි ඇති කනෙක්ට් වැනි පුස්තකාලයක් භාවිතා කළ යුතුය. මෙහි ඇති හොඳ දෙය නම් එය සරල හා ස්වයං අන්තර්ගතය (යැපීම් නැත).

නමුත් මට ඔබේ ප්‍රශ්නය දැනෙනවා. ඉතින් ඒකාබද්ධ විසඳුම මෙන්න.

var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs")
    port = process.argv[2] || 8888;

http.createServer(function(request, response) {

  var uri = url.parse(request.url).pathname
    , filename = path.join(process.cwd(), uri);

  var contentTypesByExtension = {
    '.html': "text/html",
    '.css':  "text/css",
    '.js':   "text/javascript"
  };

  fs.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, {"Content-Type": "text/plain"});
      response.write("404 Not Found\n");
      response.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) filename += '/index.html';

    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }

      var headers = {};
      var contentType = contentTypesByExtension[path.extname(filename)];
      if (contentType) headers["Content-Type"] = contentType;
      response.writeHead(200, headers);
      response.write(file, "binary");
      response.end();
    });
  });
}).listen(parseInt(port, 10));

console.log("Static file server running at\n  => http://localhost:" + port + "/\nCTRL + C to shutdown");

3
මෙය සැබවින්ම "ගැටළුව" විසඳන්නේ නැත. ඔබ index.html ද්විමය ගොනුවක් ලෙස ආපසු ලබා දෙන අතර ඔබ css සහ js හසුරුවන්නේ නැත.
idophir

4
එය css සහ js හසුරුවයි. එය ද්විමය ගොනුවක් ලෙස index.html ලබා නොදේ. එය තැටියේ ඇති ඕනෑම ආකෘතියකින් දත්ත පිටපත් කරයි. වැඩි විස්තර සඳහා කරුණාකර යාවත්කාලීන කිරීම් බලන්න.
ජොනතන් ට්‍රාන්

කේතයේ එක් ගැටළුවක්, එය කේස් සංවේදී, සමහර ලිපිගොනු සඳහා යුනික්ස් මත, එය 404 ලබා දෙයි
ප්‍රදීප්

2
"Path.exists සහ path.existsSync දැන් අතහැර දමා ඇත. කරුණාකර fs.exists සහ fs.existsSync භාවිතා කරන්න." stackoverflow.com/a/5008295/259
ඩේවිඩ් සයික්ස්

3
fs.exists()දැන් ද අතහැර දමා ඇති බව සලකන්න . fs.stat()ධාවන තත්වයක් නිර්මාණය කරනවාට වඩා දෝෂය හඳුනා ගන්න .
මතෙ

102

ඔබට සී express ්‍රගාමී අවශ්‍ය නැත. ඔබට සම්බන්ධ වීමට අවශ්‍ය නැත. Node.js http NATIVELY කරයි. ඔබ කළ යුත්තේ ඉල්ලීම මත යැපෙන ගොනුවක් ආපසු ලබා දීම පමණි:

var http = require('http')
var url = require('url')
var fs = require('fs')

http.createServer(function (request, response) {
    var requestUrl = url.parse(request.url)    
    response.writeHead(200)
    fs.createReadStream(requestUrl.pathname).pipe(response)  // do NOT use fs's sync methods ANYWHERE on production (e.g readFileSync) 
}).listen(9615)    

ඉල්ලීම්වලට මූලික නාමාවලියකට යටින් ලිපිගොනු වෙත ප්‍රවේශ විය නොහැකි බව සහතික කරන වඩාත් සම්පූර්ණ උදාහරණයකි, සහ නිසි දෝෂ හැසිරවීම:

var http = require('http')
var url = require('url')
var fs = require('fs')
var path = require('path')
var baseDirectory = __dirname   // or whatever base directory you want

var port = 9615

http.createServer(function (request, response) {
    try {
        var requestUrl = url.parse(request.url)

        // need to use path.normalize so people can't access directories underneath baseDirectory
        var fsPath = baseDirectory+path.normalize(requestUrl.pathname)

        var fileStream = fs.createReadStream(fsPath)
        fileStream.pipe(response)
        fileStream.on('open', function() {
             response.writeHead(200)
        })
        fileStream.on('error',function(e) {
             response.writeHead(404)     // assume the file doesn't exist
             response.end()
        })
   } catch(e) {
        response.writeHead(500)
        response.end()     // end the response so browsers don't hang
        console.log(e.stack)
   }
}).listen(port)

console.log("listening on port "+port)

3
මම වරදවා වටහා නොගත්තොත් මෙම විසඳුම කේතන වර්ගය ගැන සැලකිලිමත් නොවන බැවින් HTML පිටු සහ පින්තූර සඳහා වන ඉල්ලීම් එකම කේතන ක්‍රමයක් ලබා ගනී. එසේ නොවේ ද?
idophir

2
@idophir බොහෝ විට කේතීකරණය වැදගත් නැත, බ්‍රව්සර් එය භාවිතා කරන්නේ html ටැග් හෝ වෙනත් තොරතුරු මත පදනම්වය, නැතහොත් ඒවා හොඳින් අනුමාන කරයි. ඉහත සඳහන් කළ අයෙකු මෙන්, MIME වර්ගයක් වැරදි වර්ගයකට වඩා හොඳ නැත. මයිම් වර්ගවල ගොනු හඳුනා ගැනීමට ඔබට නිසැකවම node-mime වැනි දෙයක් භාවිතා කළ හැකිය, නමුත් සම්පුර්ණයෙන්ම වෙබ් අනුකූල http සේවාදායකයක් මෙම ප්‍රශ්නයට විෂය පථයෙන් බැහැරව ඇත.
බීටී

1
Oo රෝස්ටර් ඔබට විශේෂ කිසිවක් අවශ්‍ය නොවිය යුතුය node thisfile.js. එය ක්‍රියාත්මක වනු ඇත, නව සම්බන්ධතා වලට සවන්දීම සහ නව ප්‍රති results ල ලබා දීම, ඒ. ඒ සං a ාවකින් වසා ඇති තෙක් හෝ බී. කිසියම් පිස්සු දෝෂයක් කෙසේ හෝ වැඩසටහන් අවසන් වීමට හේතු වේ.
බීටී

1
Oo රූස්ටර් කිසියම් කීර්තියක් ඇති තවත් ඩිමොනයිසර් එකක් github.com/Unitech/pm2 වෙතින් සොයාගත හැකිය
සංචාරක මිනිසා

1
මම මෙම පිළිතුරට වඩාත්ම කැමතියි, නමුත් ගැටළු දෙකක් තිබේ: 1) එය 404 ක් ආපසු ලබා දිය යුතු විට එය 200 ක් ආපසු ලබා දෙයි; නිවැරදි කිරීම සඳහා මම 'විවෘත' ඇමතුමක් තුළ ලිවීම (200) අමතන්න. 2) දෝෂයක් තිබේ නම්, සොකට් එක විවෘතව තබයි; නිවැරදි කිරීම සඳහා මම ප්‍රතිචාරය අමතන්න.
පෝල් බ්‍රැනන්

71

මම හිතන්නේ ඔබට දැන් මග හැරී ඇති කොටස නම් ඔබ යවන බවයි:

Content-Type: text/plain

ඔබට HTML විදැහුම්කරණය කිරීමට වෙබ් බ්‍රව්සරයක් අවශ්‍ය නම්, ඔබ මෙය වෙනස් කළ යුත්තේ:

Content-Type: text/html

ඉක්මන් පිළිතුරට ස්තූතියි. පිටුව දැන් පූරණය වන නමුත් CSS නොමැතිව. CSS සහ JS පටවා ඇති සම්මත html පිටුවක් ලබා ගන්නේ කෙසේද?
idophir

20
ඔබ එම සේවාදායකය දිගු කිරීම ආරම්භ කළ යුතුය. දැන් එය දන්නේ index.html සේවය කරන්නේ කෙසේද යන්න පමණි - දැන් ඔබට foo.css සහ foo.js සේවය කරන්නේ කෙසේදැයි කියා දිය යුතුය, ඔවුන්ගේම සුදුසු MIME වර්ග සමඟ.
ක්ලී

1
ඔබට ස්ථිතික ලිපිගොනු සේවය කිරීමට අවශ්‍ය නැතිනම්, ඔබට ඔබේ CSS ටැගයකට දැමිය හැකිය <style>.
කීත්

1
අවුරුදු නවයකට පසු, මෙය සැබවින්ම නිවැරදි පිළිතුර ලෙස පිළිගත යුතුය.
rooch84

46

පියවර 1 (විධාන විමසුමේ ඇතුළත [ඔබ ඔබේ ෆෝල්ඩරයට සීඩී තැටියක් යැයි සිතමි]): npm install express

පියවර 2: server.js ගොනුවක් සාදන්න

var fs = require("fs");
var host = "127.0.0.1";
var port = 1337;
var express = require("express");

var app = express();
app.use(express.static(__dirname + "/public")); //use static files in ROOT/public folder

app.get("/", function(request, response){ //root dir
    response.send("Hello!!");
});

app.listen(port, host);

කරුණාකර සටහන් කරන්න, ඔබ WATCHFILE (හෝ nodeemon භාවිතා කරන්න) ද එකතු කළ යුතුය. ඉහත කේතය සරල සම්බන්ධතා සේවාදායකයක් සඳහා පමණි.

පියවර 3: node server.jsහෝnodemon server.js

ඔබට සරල සරල HTTP සේවාදායකයක් අවශ්‍ය නම් දැන් වඩාත් පහසු ක්‍රමයක් තිබේ. npm install -g http-server

අපගේ නාමාවලිය විවෘත කර ටයිප් කරන්න http-server

https://www.npmjs.org/package/http-server


@STEEL, නෝඩ් සේවාදායකය ස්වයංක්‍රීයව ආරම්භ කිරීමට ක්‍රමයක් තිබේද? මම අදහස් කළේ ඩිරෙක්ටරි මාර්ගයට නොගොස් නෝඩ්සර්වර් ටයිප් කර එය ආරම්භ වනු ඇති බවයි. මට IIS වැනි නෝඩ් සේවාදායකය ආරම්භ කිරීමට අවශ්‍යයි. ඔබට මට කියන්න පුළුවන්ද
විනෝත්

විනෝත් ඔව් බොහෝ ක්‍රම තිබේ. ඔබගේ නිශ්චිත අරමුණ හෝ ඉලක්කය කුමක්ද, මම ඔබට උදව් කළ හැකිය
STEEL

@steel මට promt විධානයෙහි node සේවාදායකය ලබා නොදී ස්වයංක්‍රීයව සේවාදායකය ආරම්භ කිරීමට අවශ්‍යයි. මෙය මගේ අවශ්‍යතාවය නම් ඔබට මට යම් උදාහරණයක් පැවසිය හැකිද
විනෝත්

ඔබට බ්‍රව්සරයේ ක්ලික් කිරීමකින් ටර්මිනල් විධාන ක්‍රියාත්මක කළ හැකි සිතුවිලි වැඩ GO වැනි මෙවලමක් භාවිතා කිරීමට අවශ්‍ය වනු ඇත.
ස්ටීල්

33

වේගවත්ම මාර්ගය:

var express = require('express');
var app = express();
app.use('/', express.static(__dirname + '/../public')); // ← adjust
app.listen(3000, function() { console.log('listening'); });

ඔබේ මාර්ගය:

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

http.createServer(function (req, res) {
    console.dir(req.url);

    // will get you  '/' or 'index.html' or 'css/styles.css' ...
    // • you need to isolate extension
    // • have a small mimetype lookup array/object
    // • only there and then reading the file
    // •  delivering it after setting the right content type

    res.writeHead(200, {'Content-Type': 'text/html'});

    res.end('ok');
}).listen(3001);

19

ස්විච් ප්‍රකාශයක් සමඟ ගනුදෙනු කරනවා වෙනුවට, ශබ්ද කෝෂයකින් අන්තර්ගත වර්ගය සොයා බැලීම සුදුසු යැයි මම සිතමි:

var contentTypesByExtension = {
    'html': "text/html",
    'js':   "text/javascript"
};

...

    var contentType = contentTypesByExtension[fileExtension] || 'text/plain';

ඔව්, එරික් බී. සෝවෙල් භාවිතා කරන "ස්විච්" විසඳුමට වඩා අලංකාර පෙනුමක් (තෝරාගත් පිළිතුර බලන්න). ස්තූතියි.
idophir

මෙම පිළිතුර මුළුමනින්ම සන්දර්භයෙන් බැහැරයි ... එය මෙම විවරණය තුළ ඇති මෙම සබැඳිය ගැන සඳහන් කරයි - stackoverflow.com/questions/6084360/… (ඔව්, කුමක් වුවත්, අන්තර්ජාලය කැඩී ඇත)
අඟහරු රොබට්සන්

15

මෙය මූලික වශයෙන් සම්බන්ධක අනුවාදය 3 සඳහා පිළිගත් පිළිතුරේ යාවත්කාලීන කළ අනුවාදයකි:

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

var app = connect();

app.use(serveStatic(__dirname, {'index': ['index.html']}));
app.listen(3000);

සුපුරුදු විකල්පයක් ද මම එකතු කළෙමි, එවිට index.html පෙරනිමියෙන් සේවය කරයි.


13

සරල සේවාදායකයක් ක්‍රියාත්මක කිරීම සඳහා ඔබට කිසිදු එන්පීඑම් මොඩියුලයක් භාවිතා කිරීමට අවශ්‍ය නැත, නෝඩ් සඳහා “ එන්පීඑම් ෆ්‍රී සර්වර් ” නමින් ඉතා කුඩා පුස්තකාලයක් ඇත :

කේත පේළි 50 ක්, ඔබ ගොනුවක් හෝ ෆෝල්ඩරයක් ඉල්ලන්නේ නම් ප්‍රතිදානය සහ එය වැඩ කිරීමට අසමත් වුවහොත් එයට රතු හෝ කොළ වර්ණයක් ලබා දේ. 1KB ට වඩා අඩු (අවම)


විශිෂ්ට තේරීමක්. Html, css, js, සහ රූප සේවය කරයි. නිදොස්කරණය සඳහා විශිෂ්ටයි. මෙම කේතය ඔබේ server.js සඳහා ආදේශ කරන්න.
පොලාරිස්

2
මම තවත් ඉහළට එකතු කළ හැකි යැයි සිතමි! මේක නියමයි! මම dist ෆෝල්ඩරයෙන් var filename = path.join(process.cwd() + '/dist/', uri); සේවාදායකයට කුඩා වෙනසක් සිදු කළෙමි . මම කේතය දැමූ අතර එය මා ටයිප් කරන විට ක්‍රියාත්මක වේserver.jsnpm start
ජෝන් හෙන්කල්

එය සේවාවක් ලෙස ක්‍රියාත්මක කරන්නේ කෙසේද, එබැවින් විධාන විමසුම වසා දැමීමෙන් පවා මට එය භාවිතා කළ හැකිය. මෙය නොමැති නම් මෙම මෙවලම සපයන කිසියම් මෙවලමක් තිබේද?
සන්දීප් වැලි

13

ඔබ පරිගණකයේ නෝඩ් ස්ථාපනය කර ඇත්නම් බොහෝ විට ඔබට එන්පීඑම් ඇත, ඔබට නෝඩ්ජේ දේවල් අවශ්‍ය නොවන්නේ නම්, ඔබට සේවය භාවිතා කළ හැකිය පැකේජය :

1 - ඔබේ පරිගණකයේ පැකේජය ස්ථාපනය කරන්න:

npm install -g serve

2 - ඔබේ ස්ථිතික ෆෝල්ඩරයට සේවය කරන්න:

serve <path> 
d:> serve d:\StaticSite

ඔබගේ ස්ථිතික ෆෝල්ඩරය සපයන්නේ කුමන වරායද යන්න එය ඔබට පෙන්වනු ඇත, වැනි ධාරකයට යන්න:

http://localhost:3000

එය සේවාවක් ලෙස ක්‍රියාත්මක කරන්නේ කෙසේද, එබැවින් විධාන විමසුම වසා දැමීමෙන් පවා මට එය භාවිතා කළ හැකිය. මෙය නොමැති නම් මෙම මෙවලම සපයන කිසියම් මෙවලමක් තිබේද?
සන්දීප් වැලි

මෙය පිළිගත් පිළිතුර විය යුතුය. මන්ද එය වඩාත් පහසුම වන අතර එය කොටුවෙන් පිටත ක්‍රියා කරයි. මේ අනුව ඔබ ධාවනය කරන්නේ මාර්ගය නොමැතිව පමණක් නම්, එය වත්මන් ෆෝල්ඩරයෙන් සේවාදායකය ධාවනය කරනු ඇත (ඔබ මීට පෙර සීඩී සංස්කරණයක් තිබූ ස්ථානය).
Игор Рајачић

9

ඔබට ප්‍රයෝජනවත් විය හැකි රසවත් පුස්තකාලයක් එන්පීඑම් හි මට හමු විය. එය mime ( npm install mimeහෝ https://github.com/broofa/node-mime ) ලෙස හඳුන්වන අතර එයට ගොනුවක mime වර්ගය තීරණය කළ හැකිය. මෙන්න මම එය භාවිතා කරමින් ලියූ වෙබ් සේවාදායකයක උදාහරණයකි:

var mime = require("mime"),http = require("http"),fs = require("fs");
http.createServer(function (req, resp) {
path  = unescape(__dirname + req.url)
var code = 200
 if(fs.existsSync(path)) {
    if(fs.lstatSync(path).isDirectory()) {
        if(fs.existsSync(path+"index.html")) {
        path += "index.html"
        } else {
            code = 403
            resp.writeHead(code, {"Content-Type": "text/plain"});
            resp.end(code+" "+http.STATUS_CODES[code]+" "+req.url);
        }
    }
    resp.writeHead(code, {"Content-Type": mime.lookup(path)})
    fs.readFile(path, function (e, r) {
    resp.end(r);

})
} else {
    code = 404
    resp.writeHead(code, {"Content-Type":"text/plain"});
    resp.end(code+" "+http.STATUS_CODES[code]+" "+req.url);
}
console.log("GET "+code+" "+http.STATUS_CODES[code]+" "+req.url)
}).listen(9000,"localhost");
console.log("Listening at http://localhost:9000")

මෙය ඕනෑම සාමාන්‍ය පෙළ හෝ රූප ගොනුවකට සේවය කරනු ඇත (.html, .css, .js, .pdf, .jpg, .png, .m4a සහ .mp3 යනු මා විසින් පරීක්ෂා කරන ලද දිගු වේ, නමුත් එය න්‍යාය එය සෑම දෙයක් සඳහාම ක්‍රියා කළ යුතුය)

සංවර්ධක සටහන්

මෙන්න මම එය සමඟ ලබාගත් ප්‍රතිදානය පිළිබඳ උදාහරණයක්:

Listening at http://localhost:9000
GET 200 OK /cloud
GET 404 Not Found /cloud/favicon.ico
GET 200 OK /cloud/icon.png
GET 200 OK /
GET 200 OK /501.png
GET 200 OK /cloud/manifest.json
GET 200 OK /config.log
GET 200 OK /export1.png
GET 200 OK /Chrome3DGlasses.pdf
GET 200 OK /cloud
GET 200 OK /-1
GET 200 OK /Delta-Vs_for_inner_Solar_System.svg

මේ tag unescapeමාර්ගය ඉදිකිරීම් කාර්යය. මෙය අවකාශයන් සහ කේතනය කළ අක්ෂර සහිත ගොනු නාම සඳහා ඉඩ දීමයි.


8

සංස්කරණය කරන්න:

Node.js නියැදි යෙදුම Node Chat ඔබට අවශ්‍ය ක්‍රියාකාරිත්වය ඇත.
එහි README.textfile
3. පියවර යනු ඔබ සොයන දෙයයි.

පියවර 1

  • වරාය 8002 හි හෙලෝ වර්ල්ඩ් සමඟ ප්‍රතිචාර දක්වන සේවාදායකයක් සාදන්න

පියවර 2

  • index.html එකක් සාදා එය සේවය කරන්න

පියවර 3

  • util.js හඳුන්වා දෙන්න
  • ඕනෑම ස්ථිතික ගොනුවක් සේවය කිරීම සඳහා තර්කනය වෙනස් කරන්න
  • ගොනුවක් සොයාගත නොහැකි නම් 404 පෙන්වන්න

පියවර 4

  • jquery-1.4.2.js එකතු කරන්න
  • client.js එක් කරන්න
  • අන්වර්ථ නාමය සඳහා පරිශීලකයාගෙන් විමසීමට index.html වෙනස් කරන්න

මෙන්න server.js

මෙන්න util.js


5
මට කමක් නැහැ. මා සතුව ඇත්තේ index.html පමණි. මට අවශ්‍ය වන්නේ html + css + js පටවා ගැනීමටයි. ස්තූතියි!
idophir

16
-1 .readFileSyncනැවත ඇමතුමක් සඳහා. Node.js සමඟ අපි අවහිර නොකරන IO භාවිතා කරමු. කරුණාකර Syncවිධාන නිර්දේශ නොකරන්න .
රේනෝස්

හායි rkrmby, උදව් කිරීමට උත්සාහ කිරීම ගැන ස්තූතියි. මම මේ ගැන ඇත්තටම අලුත් කෙනෙක්. මම server.js සහ util.js යන දෙකම බාගත කළෙමි. මම "node server.js" ධාවනය කර බ්‍රව්සරයක් භාවිතයෙන් පිටුවට පිවිසීමට උත්සාහ කරන විට, මට මෙම දෝෂය ඇතිවේ: TypeError: Object # <ServerResponse> /var/www/hppy-site/util.js හි 'වසන්න' ක්‍රමයක් නොමැත. : 67: 8 /var/www/hppy-site/util.js:56:4 [වස්තු වස්තුව] හි. <anonymous> (fs.js: 107: 5) [වස්තු වස්තුව] .මේට් (events.js : 61: 17) afterRead (fs.js: 970: 12) එතීමෙන් (fs.js: 245: 17) කිසියම් අදහසක් තිබේද? BTW - මම ඔබේ ව්‍යාපෘතිය බාගත කර එය ක්‍රියාත්මක කරන විටත් එය සිදු වේ.
idophir

1
සමාවන්න. මම නව සංස්කරණයක් භාවිතා කරමින් සිටියෙමි. Res.close () res.end () සමඟ ප්‍රතිස්ථාපනය කර ඇත
idophir

8

මා එය කරන ආකාරය නම් පළමුව ගෝලීය වශයෙන් නෝඩ් ස්ථිතික සේවාදායකය ස්ථාපනය කිරීමයි

npm install node-static -g

ඉන්පසු ඔබේ html ගොනු අඩංගු නාමාවලිය වෙත ගොස් ස්ථිතික සේවාදායකය ආරම්භ කරන්න static.

බ්‍රව්සරයට ගොස් ටයිප් කරන්න localhost:8080/"yourHtmlFile".


1
කිසිම ලයිනර් එකකට කිසිවක් පහර දෙන්නේ නැත. ස්තූතියි!
AndroidDev

එය සේවාවක් ලෙස ක්‍රියාත්මක කරන්නේ කෙසේද, එබැවින් විධාන විමසුම වසා දැමීමෙන් පවා මට එය භාවිතා කළ හැකිය. මෙය නොමැති නම් මෙම මෙවලම සපයන කිසියම් මෙවලමක් තිබේද?
සන්දීප් වැලි


7
var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    // change the to 'text/plain' to 'text/html' it will work as your index page
    res.end(index);
}).listen(9615);

මම හිතන්නේ ඔයා මේක හොයන්නේ කොහෙන්ද කියලා. ඔබේ index.html හි එය සාමාන්‍ය html කේතයකින් පුරවන්න - ඔබට එය ඉදිරිපත් කිරීමට අවශ්‍ය ඕනෑම දෙයක් වැනි:

<html>
    <h1>Hello world</h1>
</html>

7

මූලික වශයෙන් පිළිගත් පිළිතුර පිටපත් කිරීම, නමුත් js ගොනුවක් සෑදීමෙන් වළකින්න.

$ node
> var connect = require('connect'); connect().use(static('.')).listen(8000);

එය ඉතා ඒත්තු ගැන්විය.

යාවත්කාලීන කරන්න

එක්ස්ප්‍රස් හි නවතම අනුවාදය අනුව, සර්විස්-ස්ථිතික වෙනම මිඩ්ල්වෙයාර් බවට පත්ව ඇත. සේවය කිරීමට මෙය භාවිතා කරන්න:

require('http').createServer(require('serve-static')('.')).listen(3000)

serve-staticපළමුව ස්ථාපනය කරන්න .


6

Url හි කිසිදු ගොනුවක් සඳහන් කර නොමැති නම් පෙරනිමි html ගොනුවක් ලබා දෙන සරල වෙබ් සේවාදායකයක් ආරම්භ කිරීමට මම පහත කේතය භාවිතා කරමි.

var http = require('http'),
fs = require('fs'),
url = require('url'),
rootFolder = '/views/',
defaultFileName = '/views/5 Tips on improving Programming Logic   Geek Files.htm';


http.createServer(function(req, res){

    var fileName = url.parse(req.url).pathname;
    // If no file name in Url, use default file name
    fileName = (fileName == "/") ? defaultFileName : rootFolder + fileName;

    fs.readFile(__dirname + decodeURIComponent(fileName), 'binary',function(err, content){
        if (content != null && content != '' ){
            res.writeHead(200,{'Content-Length':content.length});
            res.write(content);
        }
        res.end();
    });

}).listen(8800);

එය සියළුම hsml අන්තර්ගතයන් සමඟ සියලු js, css සහ රූප ගොනුව ලබා දෙනු ඇත.

ප්රකාශයට එකඟ වන්න " වැරදි වර්ගයකට වඩා අන්තර්ගත-වර්ගයක් හොඳ නැත "


6

w3 පාසල් වලින්

ඉල්ලන ඕනෑම ගොනුවකට සේවය කිරීම සඳහා නෝඩ් සේවාදායකයක් සෑදීම පහසුය, ඒ සඳහා ඔබට කිසිදු පැකේජයක් ස්ථාපනය කිරීමට අවශ්‍ය නොවේ

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

http.createServer(function (req, res) {
  var q = url.parse(req.url, true);
  var filename = "." + q.pathname;
  fs.readFile(filename, function(err, data) {
    if (err) {
      res.writeHead(404, {'Content-Type': 'text/html'});
      return res.end("404 Not Found");
    }  
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    return res.end();
  });
}).listen(8080);

http: // localhost: 8080 / file.html

file.html තැටියෙන් සේවය කරයි


5

මෙය ඔබට අවශ්‍ය දේම දැයි මට විශ්වාස නැත, කෙසේ වෙතත්, ඔබට වෙනස් කිරීමට උත්සාහ කළ හැකිය:

{'Content-Type': 'text/plain'}

මේ සඳහා:

{'Content-Type': 'text/html'}

මෙය බ්‍රව්සර් සේවාදායකයාට සරල පෙළ වෙනුවට ගොනුව html ලෙස පෙන්වනු ඇත.


1
මෙම සමාන නොවේ මේ පවතින පිළිතුර ?
පැං

5

එක්ස්ප්‍රස් ශ්‍රිතය සෙන්ඩ් ෆයිල් ඔබට අවශ්‍ය දේ හරියටම කරන අතර ඔබට වෙබ් සේවාදායකයේ ක්‍රියාකාරීත්වය නෝඩ් එකෙන් අවශ්‍ය බැවින් එක්ස්ප්‍රස් ස්වාභාවික තේරීමක් ලෙස පැමිණෙන අතර ස්ථිතික ලිපිගොනු සේවය කිරීම පහසුය:

res.sendFile('/path_to_your/index.html')

වැඩි විස්තර මෙතැනින් කියවන්න: https://expressjs.com/en/api.html#res.sendFile

නෝඩ් සඳහා සී express ්‍රගාමී වෙබ් සේවාදායකයක් සහිත කුඩා උදාහරණයක්:

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

app.get('/', function(req, res) {
    res.sendFile(path.join(__dirname + '/index.html'));
});

app.listen(8080);

මෙය ක්‍රියාත්මක කර http: // localhost: 8080 වෙත යන්න

CSS සහ රූප වැනි ස්ථිතික ලිපිගොනු සේවය කිරීමට මෙය පුළුල් කිරීම සඳහා, තවත් උදාහරණයක් මෙන්න:

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

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

app.get('/', function(req, res) {
    res.sendFile(path.join(__dirname + '/index.html'));
});

app.listen(8080);

එබැවින් css නමින් උප ෆෝල්ඩරයක් සාදන්න, ඔබේ ස්ථිතික අන්තර්ගතය එහි තබන්න, එය ඔබේ index.html වෙත පහසුවෙන් යොමු කිරීම සඳහා ලබා ගත හැකිය:

<link type="text/css" rel="stylesheet" href="/css/style.css" />

Href හි සාපේක්ෂ මාර්ගය සැලකිල්ලට ගන්න!

voila!


4
var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');

http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'html'});
res.end(index);
}).listen(9615);

//Just Change The CONTENT TYPE to 'html'

6
මෙම Content-Typeයුතු text/htmlඑය එසේ අර්ථ ඇති ලෙස,: Content-Type := type "/" subtype *[";" parameter].
t.niese

1
මෙය එම ෆෝල්ඩරයේ ඇති සියලුම ගොනු
hsml

4

මදක් වැඩි වාචික සී express ්‍රගාමී 4.x අනුවාදයක් වන නමුත් එමඟින් නාමාවලි ලැයිස්තුගත කිරීම, සම්පීඩනය, හැඹිලි සහ ඉල්ලීම් අවම පේළි ගණනකින් ලබා දේ

var express = require('express');
var compress = require('compression');
var directory = require('serve-index');
var morgan = require('morgan'); //logging for express

var app = express();

var oneDay = 86400000;

app.use(compress());
app.use(morgan());
app.use(express.static('filesdir', { maxAge: oneDay }));
app.use(directory('filesdir', {'icons': true}))

app.listen(process.env.PORT || 8000);

console.log("Ready To serve files !")

4

මෙහි සංකීර්ණ පිළිතුරු පිස්සු ප්‍රමාණය. ඔබ nodeJS ලිපිගොනු / දත්ත සමුදාය සැකසීමට අදහස් නොකරන නමුත් ඔබේ ප්‍රශ්නය යෝජනා කරන පරිදි ස්ථිතික html / css / js / images සේවය කිරීමට අවශ්‍ය නම්, තල්ලු කිරීමේ සේවාදායකය ස්ථාපනය කරන්න මොඩියුලය හෝ ඊට සමාන ;

මෙන්න කුඩා වෙබ් අඩවියක් නිර්මාණය කර දියත් කරන "එක් ලයිනර්" එකක්. එම සම්පූර්ණ කොටසම ඔබේ පර්යන්තයේ සුදුසු නාමාවලියෙහි අලවන්න.

mkdir mysite; \
cd mysite; \
npm install pushstate-server --save; \
mkdir app; \
touch app/index.html; \
echo '<h1>Hello World</h1>' > app/index.html; \
touch server.js; \
echo "var server = require('pushstate-server');server.start({ port: 3000, directory: './app' });" > server.js; \
node server.js

බ්‍රව්සරය විවෘත කර http: // localhost: 3000 වෙත යන්න . සිදු විය.

appලිපිගොනු සේවය සඳහා සේවාදායකය මූල ලෙස dir භාවිතා කරයි . අතිරේක වත්කම් එක් කිරීමට ඒවා එම නාමාවලිය තුළ තබන්න.


2
ඔබට දැනටමත් සංඛ්‍යාලේඛන තිබේ නම්, ඔබට පහත සඳහන් දෑ භාවිතා කළ හැකිය:npm install pushstate-server --save; touch server.js; echo "var server = require('pushstate-server');server.start({ port: 3000, directory: './' });" > server.js; node server.js
Swivel

4

සරල සඳහා දැනටමත් හොඳ විසඳුම් කිහිපයක් තිබේ nodejs server. live-reloadingඔබගේ ලිපිගොනු වල වෙනස්කම් සිදු කළ විට ඔබට අවශ්‍ය නම් තවත් එක් විසඳුමක් තිබේ .

npm install lite-server -g

ඔබේ නාමාවලිය සැරිසැරීම සහ කරන්න

lite-server

එය සජීවීව නැවත පූරණය කිරීමෙන් ඔබට බ්‍රව්සරය විවෘත කරනු ඇත.


3

ඉහත පිළිතුරු වලින් බොහොමයක් අන්තර්ගතය සපයන්නේ කෙසේද යන්න ඉතා සියුම් ලෙස විස්තර කරයි. මම අතිරේකව බලා සිටියේ නාමාවලිය ලැයිස්තුගත කිරීම නිසා නාමාවලියෙහි අනෙකුත් අන්තර්ගතයන් පිරික්සීමට හැකි වීමයි. වැඩිදුර පා readers කයින් සඳහා මගේ විසඳුම මෙන්න:

'use strict';

var finalhandler = require('finalhandler');
var http = require('http');
var serveIndex = require('serve-index');
var serveStatic = require('serve-static');
var appRootDir = require('app-root-dir').get();
var log = require(appRootDir + '/log/bunyan.js');

var PORT = process.env.port || 8097;

// Serve directory indexes for reports folder (with icons)
var index = serveIndex('reports/', {'icons': true});

// Serve up files under the folder
var serve = serveStatic('reports/');

// Create server
var server = http.createServer(function onRequest(req, res){
    var done = finalhandler(req, res);
    serve(req, res, function onNext(err) {
    if (err)
        return done(err);
    index(req, res, done);
    })
});


server.listen(PORT, log.info('Server listening on: ', PORT));

3

මා හමු වූ සරලම අනුවාදය පහත පරිදි වේ. අධ්‍යාපන අරමුණු සඳහා එය වඩාත් සුදුසු වන්නේ එය කිසිදු වියුක්ත පුස්තකාලයක් භාවිතා නොකරන බැවිනි.

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

var mimeTypes = {
  "html": "text/html",
  "mp3":"audio/mpeg",
  "mp4":"video/mp4",
  "jpeg": "image/jpeg",
  "jpg": "image/jpeg",
  "png": "image/png",
  "js": "text/javascript",
  "css": "text/css"};

http.createServer(function(req, res) {
    var uri = url.parse(req.url).pathname;
    var filename = path.join(process.cwd(), uri);
    fs.exists(filename, function(exists) {
        if(!exists) {
            console.log("not exists: " + filename);
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.write('404 Not Found\n');
            res.end();
            return;
        }
        var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
        res.writeHead(200, {'Content-Type':mimeType});

        var fileStream = fs.createReadStream(filename);
        fileStream.pipe(res);

    }); //end path.exists
}).listen(1337);

දැන් බ්‍රව්සරයට ගොස් පහත සඳහන් දෑ විවෘත කරන්න:

http://127.0.0.1/image.jpg

මෙන්න image.jpgමෙම ගොනුව හා සමාන නාමාවලියක තිබිය යුතුය. මෙය යමෙකුට උපකාරී වේ යැයි සිතමි :)


ඔබ ගොනු නාමයෙන් මයිම් වර්ගය දිව්‍ය නොකළ යුතුය.
mwieczorek

සටහන: fs.exists () ඉවත් කර ඇත, fs.existsSync () යනු සෘජු ආදේශනයයි.
JWAspin

wmwieczorek එය බෙදිය යුත්තේ කෙසේද? ඔහු ගොනු දිගුව වෙන් කරන බව ඔබට මග හැරුණාද?
ජේම්ස් නිව්ටන්

භාවිතා කිරීමට අවශ්‍ය විය හැකිය: mimeType = mimeTypes [filename.split ("."). පොප් ()] || "application / octet-stream"
ජේම්ස් නිව්ටන්

2

වෙබ් පිටු ඉක්මනින් බැලීමට මම භාවිතා කරන වේගවත්ම විසඳුම මෙයයි

sudo npm install ripple-emulator -g

එතැන් සිට ඔබගේ html ගොනු වල නාමාවලිය ඇතුළත් කර ධාවනය කරන්න

ripple emulate

ඉන්පසු උපාංගය නෙක්සස් 7 භූ දර්ශනයට වෙනස් කරන්න.


5
නෙක්සස් 7 ටෝඩෝ සමඟ ඇත්තේ කුමක්ද?
waeltken

2

දේශීය-වෙබ් සේවාදායකය අනිවාර්යයෙන්ම බැලීම වටී! මෙන්න කියවීමේ උපුටා ගැනීමකි:

දේශීය වෙබ් සේවාදායකය

වේගවත් පූර්ණ-තොග සංවර්ධනය සඳහා සිහින්, මොඩියුලර් වෙබ් සේවාදායකයක්.

  • HTTP, HTTPS සහ HTTP2 සඳහා සහය දක්වයි.
  • කුඩා හා 100% පුද්ගලීකරණය කළ හැකිය. ඔබේ ව්‍යාපෘතියට අවශ්‍ය හැසිරීම පමණක් පටවා භාවිතා කරන්න.
  • ක්‍රියාකාරකම් දෘශ්‍යමාන වන ආකාරය පුද්ගලීකරණය කිරීමට අභිරුචි දර්ශනයක් අමුණන්න.
  • ක්‍රමලේඛන සහ විධාන රේඛා අතුරුමුහුණත්.

මේ සඳහා මෙම මෙවලම භාවිතා කරන්න:

  • ඕනෑම ආකාරයක ඉදිරිපස වෙබ් යෙදුමක් සාදන්න (ස්ථිතික, ගතික, තනි පිටු යෙදුම, ප්‍රගතිශීලී වෙබ් යෙදුම, ප්‍රතික්‍රියා ආදිය).
  • පසුගාමී සේවාවක් මූලාකෘතිකරණය කරන්න (REST API, මයික්‍රෝ සර්විසස්, වෙබ්සොකට්, සර්වර් එවන ලද සිදුවීම් සේවාව ආදිය).
  • ක්‍රියාකාරකම් අධීක්ෂණය කිරීම, කාර්ය සාධනය විශ්ලේෂණය කිරීම, හැඹිලි උපාය මාර්ග අත්හදා බැලීම යනාදිය.

දේශීය-වෙබ්-සේවාදායකය යනු lws බෙදා හැරීමකි ප්‍රයෝජනවත් මිඩ්ල්වෙයාර්වල “ආරම්භක ඇසුරුමක්” සමඟ බැඳී ඇති .

සාරාංශය

මෙම පැකේජය wsවිධාන රේඛා මෙවලම ස්ථාපනය කරයි ( භාවිත මාර්ගෝපදේශය දෙස බලන්න ).

ස්ථිතික වෙබ් අඩවිය

wsකිසිදු තර්කයකින් තොරව ධාවනය කිරීමෙන් වත්මන් නාමාවලිය ස්ථිතික වෙබ් අඩවියක් ලෙස සත්කාරකත්වය සපයනු ඇත. සේවාදායකයට සැරිසැරීමෙන් ඩිරෙක්ටරි ලැයිස්තුගත කිරීමක් හෝ index.htmlඑම ගොනුව තිබේ නම් ඔබේ .

$ ws
Listening on http://mbp.local:8000, http://127.0.0.1:8000, http://192.168.0.100:8000

ස්ථිතික ගොනු නිබන්ධනය .

මෙම ක්ලිප් මඟින් ස්ථිතික සත්කාරකත්වය සහ ලොග් ප්‍රතිදාන ආකෘති කිහිපයක් පෙන්නුම් කරයි - devසහ stats.

තනි පිටු යෙදුම

තනි පිටු යෙදුමකට සේවය කිරීම (ග්‍රාහක පාර්ශවීය රවුටින් සහිත යෙදුමක්, උදා: ප්‍රතික්‍රියා හෝ කෝණික යෙදුමක්) ඔබේ තනි පිටුවක නම සඳහන් කිරීම තරම් සුළු ය:

$ ws --spa index.html

ස්ථිතික අඩවිය සමග, සාමාන්ය SPA මාර්ග (උදා: සඳහා වන ඉල්ලීම් /user/1, /login) ඇති බවත් නැවත 404 Not Foundඑම ස්ථානයේ ගොනුවක් ලෙස නොපවතියි. කෙසේ වෙතත්, index.htmlSPA ලෙස සලකුණු කිරීමෙන් ඔබ මෙම රීතිය නිර්මාණය කරයි:

ස්ථිතික ගොනුවක් ඉල්ලා තිබේ නම් (උදා /css/style.css) එය සේවය කරන්න, එසේ නොවේ නම් (උදා /login) නිශ්චිත SPA ට සේවය කර සේවාදායකයාගේ පැත්ත හසුරුවන්න.

SPA නිබන්ධනය .

URL නැවත ලිවීම සහ ප්‍රොක්සි ඉල්ලීම්

තවත් පොදු භාවිත අවස්ථාවක් වන්නේ දුරස්ථ සේවාදායකයකට ඇතැම් ඉල්ලීම් යොමු කිරීමයි.

පහත දැක්වෙන විධානය මඟින් ආරම්භ වන ඕනෑම මාර්ගයකින් බ්ලොග් පෝස්ට් ඉල්ලීම් ඉදිරිපත් /posts/කරයි https://jsonplaceholder.typicode.com/posts/. උදාහරණයක් ලෙස, ඉල්ලීමක් /posts/1ප්‍රොක්සි වේ https://jsonplaceholder.typicode.com/posts/1.

$ ws --rewrite '/posts/(.*) -> https://jsonplaceholder.typicode.com/posts/$1'

නිබන්ධනය නැවත ලියන්න .

--static.extensionsපෙරනිමි ගොනු දිගුවක් නියම කිරීමට සහ --verboseක්‍රියාකාරකම් අධීක්ෂණය කිරීමට ඉහත ප්ලස් භාවිතය මෙම ක්ලිප් මඟින් පෙන්නුම් කරයි .

HTTPS සහ HTTP2

HTTPS හෝ HTTP2 සඳහා පිළිවෙලින් --httpsහෝ --http2කොඩි පසු කරන්න . වැඩිදුර වින්‍යාස කිරීමේ විකල්ප සඳහා විකිය බලන්න සහ ඔබේ බ්‍රව්සරයේ “හරිත පෑඩ්ලොක්” ලබා ගන්නේ කෙසේද යන්න පිළිබඳ මාර්ගෝපදේශයක් බලන්න .

$ lws --http2
Listening at https://mba4.local:8000, https://127.0.0.1:8000, https://192.168.0.200:8000

1

මට SugoiJS නිර්දේශ කළ හැකිය, එය සැකසීම ඉතා පහසු වන අතර වේගයෙන් ලිවීම ආරම්භ කිරීමට විකල්පයක් ලබා දෙන අතර විශිෂ්ට ලක්ෂණ ඇත.

ආරම්භ කිරීම සඳහා මෙහි බලන්න: http://demo.sugoijs.com/ , ප්‍රලේඛනය: https://wiki.sugoijs.com/

එහි ඉල්ලීම් හසුරුවන්නන්, ඉල්ලීම් ප්‍රතිපත්ති සහ බලය පැවරීමේ ප්‍රතිපත්ති සැරසිලි කරුවන් ඇත.

උදාහරණයක් වශයෙන්:

import {Controller,Response,HttpGet,RequestParam} from "@sugoi/server";

@Controller('/dashboard')
export class CoreController{
    constructor(){}

    @HttpGet("/:role")
    test(@RequestParam('role') role:string,
         @RequestHeader("role") headerRole:string){
        if(role === headerRole )
            return "authorized";
        else{
            throw new Error("unauthorized")
        }
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.