Heim Web-Frontend js-Tutorial So erstellen Sie einen Webserver mit Node.js

So erstellen Sie einen Webserver mit Node.js

Jan 05, 2021 pm 05:45 PM
node.js web服务器

使用nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为实现Web服务器需要用到几个比较重要的模块:http模块、文件系统、url解析模块、路径解析模块、以及301重定向技术等,下面我们就一起来学习如何搭建一个简单的Web服务器。

So erstellen Sie einen Webserver mit Node.js

相关推荐:《nodejs 教程

作为一个Web服务器应具备以下几个功能:

  • 能显示以 .html/.htm 结尾的 Web 页面
  • 能直接打开以 .js/.css/.json/.text 结尾的文件内容
  • 显示图片资源
  • 自动下载以 .apk/.docx/.zip 结尾的文件
  • 形如 http://xxx.com/a/b/ ,  则查找b目录下是否有index.html, 如果有就显示,如果没有就列出该目录下的所有文件及文件夹,并可以进一步访问。
  • 形如 http://xxx.com/a/b,  则作301重定向到 http://xxx.com/a/b/ , 这样可以解决内部资源引用错位的问题。

引入需要用到的几个模块:

// http协议模块
var http = require('http');
// url解析模块
var url = require('url');
// 文件系统模块
var fs = require('fs');
// 路径解析模块
var path = require('path');
Nach dem Login kopieren

创建服务并在指定的端口监听:

// 创建一个服务
var httpServer = http.createServer(this.processRequest.bind(this));

// 在指定的端口监听服务
httpServer.listen(port, function() {
    console.log('[HttpServer][Start]', 'runing at http://' + ip + ':' + port + '/');
    console.timeEnd('[HttpServer][Start]');
});
Nach dem Login kopieren

在创建服务的时候需要传递一个匿名函数 processRequest 对请求进行处理,processRequest接收两个参数,分别是 request 和 response, request 对象中包含了请求的所有内容,response 是用来设置响应头以及对客户端做出响应操作。

processRequest: function (request, response) {
    varhasExt = true;
    varrequestUrl = request.url;
    varpathName = url.parse(requestUrl).pathname;
 
    // 对请求的路径进行解码,防止中文乱码
    pathName = decodeURI(pathName);
 
    // 如果路径中没有扩展名
    if(path.extname(pathName) === '') {
        // 如果不是以/结尾的,加/并作301重定向
        if(pathName.charAt(pathName.length-1) != '/'){
            pathName += '/';
            varredirect = 'http://'+ request.headers.host + pathName;
            response.writeHead(301, {
                location: redirect
            });
            response.end();
            return;
        }
        // 添加默认的访问页面,但这个页面不一定存在,后面会处理
        pathName += 'index.html';
        hasExt = false; // 标记默认页面是程序自动添加的
    }
 
    // 获取资源文件的相对路径
    varfilePath = path.join('http/webroot', pathName);
 
    // 获取对应文件的文档类型
    varcontentType = this.getContentType(filePath);
 
    // 如果文件名存在
    fs.exists(filePath, function(exists) {
        if(exists) {
            response.writeHead(200, {'content-type': contentType});
            varstream = fs.createReadStream(filePath, {flags: 'r', encoding: null});
            stream.on('error', function () {
                response.writeHead(500, {'content-type': 'text/html'});
                response.end(&#39;<h1>500 Server Error</h1>&#39;);
            });
            // 返回文件内容
            stream.pipe(response);
        } else{ // 文件名不存在的情况
            if(hasExt) {
                // 如果这个文件不是程序自动添加的,直接返回404
                response.writeHead(404, {&#39;content-type&#39;: &#39;text/html&#39;});
                response.end(&#39;<h1>404 Not Found</h1>&#39;);
            } else{
                // 如果文件是程序自动添加的且不存在,则表示用户希望访问的是该目录下的文件列表
                varhtml = "<head><meta charset=&#39;utf-8&#39;></head>";
                try{
                    // 用户访问目录
                    varfiledir = filePath.substring(0, filePath.lastIndexOf(&#39;\\&#39;));
                    // 获取用户访问路径下的文件列表
                    varfiles = fs.readdirSync(filedir);
                    // 将访问路径下的所以文件一一列举出来,并添加超链接,以便用户进一步访问
                    for(vari infiles) {
                        varfilename = files[i];
                        html += "<div><a  href=&#39;"+ filename + "&#39;>"+ filename + "</a></div>";
                    }
                } catch(e){
                    html += &#39;<h1>您访问的目录不存在</h1>&#39;;
                }
                response.writeHead(200, {&#39;content-type&#39;: &#39;text/html&#39;});
                response.end(html);
            }
        }
    });
}
Nach dem Login kopieren

请求处理函数中有几个重点需要说一下:

对于路径中有中文的,浏览器会自动进行编码(英文不变,中文会变),因此在接收到地址后,需要对地址进行解码,否则最后得到的路径和真实路径不相符,

当访问路径不是以具体的文件结尾,并且不是以/结尾,则需要通过重定向加上/,表示当前目录,否则当前路径下的静态资源会找不到。

如果访问路径是目录,则列出该目录下所有文件及文件夹,并可以点击访问,为了让中文目录能正常显示,则还要在header中设置charset=utf-8

核心代码就这么多,大概140行左右,完整的代码已上传到 github : https://github.com/git-onepixel/Node,  

如果要运行demo,打开 cmd 切换到根目录,运行 node start 即可。

如有问题,欢迎讨论!

更多编程相关知识,请访问:编程教学!!

Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen Webserver mit Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ein Artikel über Speichersteuerung in Node Ein Artikel über Speichersteuerung in Node Apr 26, 2023 pm 05:37 PM

Der nicht blockierende und ereignisgesteuerte Knotendienst hat den Vorteil eines geringen Speicherverbrauchs und eignet sich sehr gut für die Verarbeitung massiver Netzwerkanforderungen. Unter der Voraussetzung massiver Anfragen müssen Probleme im Zusammenhang mit der „Speicherkontrolle“ berücksichtigt werden. 1. Der Garbage-Collection-Mechanismus und die Speicherbeschränkungen von V8 Js wird von der Garbage-Collection-Maschine gesteuert

Sicherheitsüberprüfung und Ereignisprotokollverwaltung von Webservern, die auf CentOS basieren Sicherheitsüberprüfung und Ereignisprotokollverwaltung von Webservern, die auf CentOS basieren Aug 05, 2023 pm 02:33 PM

Überblick über die Sicherheitsüberprüfung und Ereignisprotokollverwaltung von Webservern, die auf CentOS basieren. Mit der Entwicklung des Internets sind Sicherheitsüberprüfung und Ereignisprotokollverwaltung von Webservern immer wichtiger geworden. Nach dem Einrichten eines Webservers unter dem CentOS-Betriebssystem müssen wir auf die Sicherheit des Servers achten und den Server vor böswilligen Angriffen schützen. In diesem Artikel wird die Durchführung von Sicherheitsüberprüfungen und der Verwaltung von Ereignisprotokollen vorgestellt und relevante Codebeispiele bereitgestellt. Sicherheitsaudit Unter Sicherheitsaudit versteht man die umfassende Überwachung und Überprüfung des Sicherheitsstatus des Servers, um Potenziale rechtzeitig zu erkennen

Lassen Sie uns ausführlich über das File-Modul in Node sprechen Lassen Sie uns ausführlich über das File-Modul in Node sprechen Apr 24, 2023 pm 05:49 PM

Das Dateimodul ist eine Kapselung der zugrunde liegenden Dateioperationen, wie z. B. Lesen/Schreiben/Öffnen/Schließen/Löschen von Dateien, Hinzufügen usw. Das größte Merkmal des Dateimoduls besteht darin, dass alle Methoden zwei Versionen von **synchronem** und **bereitstellen. asynchron**, mit Methoden mit dem Suffix sync sind alle Synchronisationsmethoden, und diejenigen ohne sind alle heterogene Methoden.

Best Practices: Leitfaden zur Leistungsoptimierung zum Erstellen eines Webservers unter CentOS Best Practices: Leitfaden zur Leistungsoptimierung zum Erstellen eines Webservers unter CentOS Aug 04, 2023 pm 12:17 PM

Best Practices: Leitfaden zur Leistungsoptimierung zum Erstellen von Webservern unter CentOS Zusammenfassung: Dieser Artikel soll einige Best Practices zur Leistungsoptimierung für Benutzer bereitstellen, die Webserver unter CentOS erstellen, um die Leistung und Reaktionsgeschwindigkeit des Servers zu verbessern. Es werden einige wichtige Optimierungsparameter und häufig verwendete Optimierungsmethoden vorgestellt und einige Beispielcodes bereitgestellt, um den Lesern zu helfen, diese Methoden besser zu verstehen und anzuwenden. 1. Schalten Sie unnötige Dienste aus. Beim Erstellen eines Webservers unter CentOS werden standardmäßig einige unnötige Dienste gestartet, die Systemressourcen belegen.

Berechtigungen und Zugriffskontrollstrategien, auf die Sie achten müssen, bevor Sie einen Webserver unter CentOS erstellen Berechtigungen und Zugriffskontrollstrategien, auf die Sie achten müssen, bevor Sie einen Webserver unter CentOS erstellen Aug 05, 2023 am 11:13 AM

Berechtigungen und Zugriffskontrollstrategien, auf die Sie achten müssen, bevor Sie einen Webserver unter CentOS erstellen. Beim Aufbau eines Webservers sind Berechtigungen und Zugriffskontrollstrategien sehr wichtig. Durch das korrekte Festlegen von Berechtigungen und Zugriffskontrollrichtlinien kann die Sicherheit des Servers geschützt und verhindert werden, dass unbefugte Benutzer auf vertrauliche Daten zugreifen oder den Server nicht ordnungsgemäß betreiben. In diesem Artikel werden die Berechtigungen und Zugriffskontrollstrategien vorgestellt, auf die beim Aufbau eines Webservers unter dem CentOS-System geachtet werden muss, und entsprechende Codebeispiele bereitgestellt. Benutzer- und Gruppenverwaltung Zuerst müssen wir eine dedizierte erstellen

Erfahren Sie mehr über Puffer in Node Erfahren Sie mehr über Puffer in Node Apr 25, 2023 pm 07:49 PM

Zu Beginn lief JS nur auf der Browserseite. Es war einfach, Unicode-codierte Zeichenfolgen zu verarbeiten, aber es war schwierig, binäre und nicht Unicode-codierte Zeichenfolgen zu verarbeiten. Und Binär ist das Datenformat der niedrigsten Ebene des Computer-, Video-/Audio-/Programm-/Netzwerkpakets

Best Practices zum Schreiben von Webservern in Go Best Practices zum Schreiben von Webservern in Go Jun 18, 2023 pm 07:38 PM

Die Go-Sprache ist zu einer beliebten Entwicklungssprache geworden, insbesondere für die Netzwerkprogrammierung. Beim Schreiben eines Webservers in Go gibt es viele Best Practices, um die Sicherheit, Wartbarkeit und Skalierbarkeit des Servers zu gewährleisten. Hier finden Sie einige Vorschläge und Vorgehensweisen, die Ihnen dabei helfen können, die Effizienz und Zuverlässigkeit Ihres Go-Webservers zu verbessern. Verwenden der Standardbibliothek In der Standardbibliothek der Go-Sprache gibt es viele Pakete, die sich auf die Netzwerkprogrammierung beziehen. Beispielsweise hilft Ihnen das Paket „net/http“ beim Schreiben von HTTP-Servern und das Paket „net“ hilft bei der Handhabung von Netzwerkverbindungen auf niedriger Ebene.

Einführungs-Tutorial: Eine Kurzanleitung zum Einrichten eines Webservers unter CentOS Einführungs-Tutorial: Eine Kurzanleitung zum Einrichten eines Webservers unter CentOS Aug 04, 2023 pm 06:04 PM

Einsteiger-Tutorial: Eine Kurzanleitung zum Aufbau eines Webservers unter CentOS Einführung: Im heutigen Internetzeitalter ist der Aufbau eines eigenen Webservers für viele Menschen zu einem Bedürfnis geworden. In diesem Artikel erfahren Sie, wie Sie einen Webserver auf dem CentOS-Betriebssystem erstellen und Codebeispiele bereitstellen, um den Lesern bei der schnellen Implementierung zu helfen. Schritt 1: Apache installieren und konfigurieren Öffnen Sie das Terminal und installieren Sie den Apache-Server mit dem folgenden Befehl: sudoyuminstallhttpd Starten Sie Apac nach Abschluss der Installation

See all articles