通过 express 模拟 Apache 实现静态资源托管服务|学习笔记

简介: 快速学习通过 express 模拟 Apache 实现静态资源托管服务

开发者学堂课程【Node.js 入门与实战通过 express 模拟 Apache 实现静态资源托管服务】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/588/detail/8317


通过 express 模拟 Apache 实现静态资源托管服务


使用express模拟Apache服务器

之前模拟apache服务器的功能是先在服务器端建一个文件夹,把所有静态资源放到文件夹下面,监听用户的requires事件当requires事件过来以后,用户请求的路径和文件夹路径拼起来,然回去文件夹下找对应的静态资源。找到静态资源进行读取后返回,找不到就提示404找不到这个文件。

当使用express来模拟apache服务器,核心只有一句代码。

1.模拟Apache服务器

//入口文件

//模拟静态资源服务器(Apache服务器)

//加载express模块

var express = require(express);

var path = require(path);

//创建app对象

var app = express();

//处理静态资源的方法

//var fn =express.static(path.join(__dirname,’public))

//注册路由

//app.use(‘/’,fn);

app.use(/,express.static(path.join(__dirname ,public)));

//启动服务

app.listen(9999, function ( ){

consoLe.log( http: / /localhost:9999’);

});

先建一个package json文件安装express 。然后加载express模块,第二步创建app对象,中间注册路由最后启动服务,启动完服务之后然后访问。

因为要模拟apache服务器,所以要在当前的项目下创建一个目录文件夹在里面放静态资源。要把创建目录下静态资源暴露给外界,浏览器就可以通过这个路径来访问。

其实核心就app.use(‘/’,fn);这里用的是use,它可以传两个参数第一个要匹配路径,这里传一个根目录表示请求这个网站下的任何一个路径,都认为是要找这个静态资源。

Express有一个方法,它会自动生成一个方法就是处理静态资源的方法,在这声明一个变量里面保存一个函数,static这个方法它会返回一个函数,它就是处理对应静态资源的一个函数。

现在假设fn函数就是用来处理静态资源的函数,但是fn不知道静态资源放在什么地方。需要在static里面传一个参数过来,这样的话就告诉static静态资源都放在public下,它就会在这个目录下生成一个函数。

2.查看fn的源代码

把fn打印一下查看一下源代码

var fn =express.static(path.join(__dirname,’public’))

console.log(fn.toString());

一个函数toString就可以看到函数的源代码

function servestatic(req, res, next) {

if (req.method !== 'GET' &8 req.method !== "HEAD'){if (fallthrough) {

lreturn next()

}

/ / method not allowedres.statusCode = 405

res.setHeader( ' Allow ' , 'GET,HEAD')

res.setHeader( 'Content-Length', 'e')

res.end()

return

}

var forwardError = !fallthrough

var originalUrl = parseUrl.original(req)

var path = parseUrl(req).pathname

//make sure redirect occurs at mount

if (path =z= '/' && originalUrl.pathname.substr(-1)!== '/'){

path -=''

}

//create send stream

var stream = send(req, path,opts)

// add directory handler

stream.on( 'directory ' , onDirectory)

//add headers listener

if (setHeaders) {

stream.on( ' headers', setHeaders)

}

//add file listener for fallthroughif (fallthrough)

If (fallthrough){

stream.on( 'file', function onFile (){

// once file is determined,always forward error

forwardError = true

})

}

//forward errors

stream.on( 'error', function error (err) {

if (forwardError ll !(err.statusCode < 500)){

next(err)

return

}

next()

})

//pipe

stream.pipe(res)

}

这就是我们的源代码

根据用户请求的路径,去读取目录下的静态资源

相关文章
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
82 3
|
2月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
261 1
|
3月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。
|
4月前
|
JavaScript 前端开发 中间件
构建高效后端服务:Node.js与Express框架的完美搭档
【8月更文挑战第28天】在追求高性能、可扩展和易维护的后端开发领域,Node.js和Express框架的组合提供了一种轻量级且灵活的解决方案。本文将深入探讨如何利用这一组合打造高效的后端服务,并通过实际代码示例展示其实现过程。
|
2月前
|
存储 分布式计算 druid
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
65 3
|
2月前
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
54 1
|
4月前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的深度整合
【8月更文挑战第27天】 在现代Web开发中,后端服务的高效性至关重要。本文深入探讨了如何利用Node.js的非阻塞I/O特性和Express框架的简洁性来打造高性能的后端服务。我们将通过具体案例,展示如何在不牺牲代码可读性和可维护性的前提下,实现高效的请求处理和服务端逻辑。文章旨在为开发者提供一个清晰的指导,帮助他们在构建后端服务时做出更明智的技术选择。
|
4月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
4月前
|
存储 缓存 JavaScript
构建高效后端服务:Node.js与Express框架的实战应用
【8月更文挑战第2天】在数字化时代的浪潮中,后端服务的构建成为了软件开发的核心。本文将深入探讨如何利用Node.js和Express框架搭建一个高效、可扩展的后端服务。我们将通过实际代码示例,展示从零开始创建一个RESTful API的全过程,包括路由设置、中间件使用以及数据库连接等关键步骤。此外,文章还将触及性能优化和安全性考量,旨在为读者提供一套完整的后端开发解决方案。让我们一同走进Node.js和Express的世界,探索它们如何助力现代Web应用的开发。
|
4月前
|
弹性计算 JavaScript 中间件
构建高效后端服务:使用Node.js和Express框架
【8月更文挑战第4天】本文将通过一个实际案例,详细介绍如何使用Node.js和Express框架快速构建一个高效、可扩展的后端服务。我们将从项目初始化开始,逐步实现RESTful API接口,并介绍如何利用中间件优化请求处理流程。最后,我们将展示如何部署应用到云服务器上,确保其高可用性和可扩展性。

推荐镜像

更多