习题

搜索工具

在 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是一个目录,服务器会返回该目录下的文件列表,你可以利用该特性实现你的网页。

不要直接编辑文件服务器开放的代码,如果你犯了什么错误,很有可能就破坏了你的代码。相反,将你的代码保存在公共访问目录之外,测试时再将其拷贝到公共目录中。