习题
搜索工具
在 Unix 系统上,有一个名为grep
的命令行工具,可以用来在文件中快速搜索正则表达式。
编写一个可以从命令行运行的 Node 脚本,其行为类似grep
。 它将其第一个命令行参数视为正则表达式,并将任何其他参数视为要搜索的文件。 它应该输出内容与正则表达式匹配的,任何文件的名称。
当它有效时,将其扩展,以便当其中一个参数是目录时,它将搜索该目录及其子目录中的所有文件。
按照你认为合适的方式,使用异步或同步文件系统函数。 配置一些东西,以便同时请求多个异步操作可能会加快速度,但不是很大,因为大多数文件系统一次只能读取一个东西。
目录创建
尽管我们的文件服务器中的DELETE
方法可以删除目录(使用rmdir
),但服务器目前不提供任何方法来创建目录。
添加对MKCOL
方法(“make column”)的支持,它应该通过调用fs
模块的mkdir
创建一个目录。 MKCOL
并不是广泛使用的 HTTP 方法,但是它在 WebDAV 标准中有相同的用途,这个标准在 HTTP 之上规定了一组适用于创建文档的约定。
你可以使用实现DELETE
方法的函数,作为MKCOL
方法的蓝图。 当找不到文件时,尝试用mkdir
创建一个目录。 当路径中存在目录时,可以返回 204 响应,以便目录创建请求是幂等的。 如果这里存在非目录文件,则返回错误代码。 代码 400(“Bad Request”,请求无效)是适当的。
网络上的公共空间
由于文件服务器提供了任何类型的文件服务,甚至只要包含正确的Content-Type
协议头,你可以使用其提供网站服务。由于该服务允许每个人删除或替换文件,因此这是一类非常有趣的网站:任何人只要使用正确的 HTTP 请求,都可以修改、改进并破坏文件。但这仍然是一个网站。
请编写一个基础的 HTML 页面,包含一个简单的 JavaScript 文件。将该文件放在文件服务器的数据目录下,并在你的浏览器中打开这些文件。
接下来,作为进阶练习或是周末作业,将你迄今为止在本书中学习到的内容整合起来,构建一个对用户友好的界面,在网站内部修改网站。
使用 HTML 表单编辑组成网站的文件内容,允许用户使用 HTTP 请求在服务器上更新它们,如第十八章所述。
刚开始的时候,该页面仅允许用户编辑单个文件,然后进行修改,允许选择想要编辑的文件。向文件服务器发送请求时,若URL是一个目录,服务器会返回该目录下的文件列表,你可以利用该特性实现你的网页。
不要直接编辑文件服务器开放的代码,如果你犯了什么错误,很有可能就破坏了你的代码。相反,将你的代码保存在公共访问目录之外,测试时再将其拷贝到公共目录中。