本篇文章小编给大家分享一下使用Node.js搭建Web服务器代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
1、 Node.js 创建的第一个应用
1、引入http模块
var http = require("http");
2、 创建服务器
接下来我们使用http.createServer()方法创建服务器,并使用listen方法绑定8888端口。函数通过request, response参数来接收和响应数据。
//1.引入 http 模块 var http=require('http'); //2.用 http 模块创建服务 http.createServer(function(req,res){ // 发送 HTTP 头部 // HTTP 状态值: 200 : OK //设置 HTTP 头部,状态码是 200,文件类型是 html,字符集是 utf-8 res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"}); res.write('你好 nodejs'); res.write('我是第一个 nodejs 程序'); res.end(); /*结束响应*/ }).listen(8001);
2、 WEB 服务器介绍
Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等 Web 客户端提供文档, 也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个 Web 服务器是 Apache 、 Nginx 、IIS。
3、 Nodejs 封装一个 WEB 服务器
启动
node start
功能
* 能显示以 `.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/` , 这样可以解决内部资源引用错位的问题。
HttpServer.js
module.exports = (function () { "use strict"; console.time('[HttpServer][Start]'); //http协议模块 var http = require('http'); //url解析模块 var url = require('url'); //文件系统模块 var fs = require("fs"); //路径解析模块 var path = require("path"); return { //启动服务 start: function () { var port = this.config.port; var ip = this.config.ip; //创建一个服务 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]"); }); httpServer.on("error", function (error) { console.error(error); }); }, /** * 请求处理 * @param request * @param response */ processRequest: function (request, response) { var hasExt = true; var requestUrl = request.url; var pathName = url.parse(requestUrl).pathname; //对请求的路径进行解码,防止中文乱码 pathName = decodeURI(pathName); //如果路径中没有扩展名 if ((pathName) === '') { //如果不是以/结尾的,加/并作301重定向 if (pathName.charAt(pathName.length - 1) != "/") { pathName += "/"; var redirect = "http://" + request.headers.host + pathName; response.writeHead(301, { location: redirect }); response.end(); return; //fix bug: 执行301重定向后应终止后续流程,以防 "write after end" 异常 } //添加默认的访问页面,但这个页面不一定存在,后面会处理 pathName += "index.html"; hasExt = false; //标记默认页面是程序自动添加的 } //获取资源文件的相对路径 var filePath = path.join("http/webroot", pathName); //获取对应文件的文档类型 var contentType = this.getContentType(filePath); //如果文件名存在 fs.exists(filePath, function (exists) { if (exists) { response.writeHead(200, {"content-type": contentType}); var stream = fs.createReadStream(filePath, {flags: "r", encoding: null}); stream.on("error", function () { response.writeHead(500, {"content-type": "text/html"}); response.end("500 Server Error
"); }); //返回文件内容 stream.pipe(response); } else { //文件名不存在的情况 if (hasExt) { //如果这个文件不是程序自动添加的,直接返回404 response.writeHead(404, {"content-type": "text/html"}); response.end("404 Not Found
"); } else { //如果文件是程序自动添加的且不存在,则表示用户希望访问的是该目录下的文件列表 var html = ""; try { //用户访问目录 var filedir = filePath.substring(0, filePath.lastIndexOf('')); //获取用户访问路径下的文件列表 var files = fs.readdirSync(filedir); //将访问路径下的所以文件一一列举出来,并添加超链接,以便用户进一步访问 for (var i in files) { var filename = files[i]; html += ""; } } catch (e) { html += "您访问的目录不存在
" } response.writeHead(200, {"content-type": "text/html"}); response.end(html); } } }); }, /** * 获取文档的内容类型 * @param filePath * @returns {*} */ getContentType: function (filePath) { var contentType = this.config.mime; var ext = path.extname(filePath).substr(1); if (contentType.hasOwnProperty(ext)) { return contentType[ext]; } else { return contentType.default; } }, ///配置信息 config: { port: 8888, ip: '127.0.0.1', mime: { html: "text/html", js: "text/javascript", css: "text/css", gif: "image/gif", jpg: "image/jpeg", png: "image/png", ico: "image/icon", txt: "text/plain", json: "application/json", default: "application/octet-stream" } } } })();
start.js
var http = require('./http/HttpServer'); http.start();
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整