Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Node.js读取不同名称的文件?_Javascript_Html_Node.js - Fatal编程技术网

Javascript 如何使用Node.js读取不同名称的文件?

Javascript 如何使用Node.js读取不同名称的文件?,javascript,html,node.js,Javascript,Html,Node.js,我有一个包含HTML文件的文件夹,它有两个不同的类别。其中一个是名为arq.html的主页,其中包含其他页面的索引。所有其他页面都包含关于特定个人的实际信息,并且名称为arqx.html,其中x对应于页面的编号 我试图做的是能够单击一个索引并进入相应的HTML页面。每个索引都有一个URL localhost:7777/arq/x 例如,localhost:7777/arq/7应该使用arq7.html文件进行应答 目前,我有以下代码: var http = require('http') var

我有一个包含HTML文件的文件夹,它有两个不同的类别。其中一个是名为arq.html的主页,其中包含其他页面的索引。所有其他页面都包含关于特定个人的实际信息,并且名称为arqx.html,其中x对应于页面的编号

我试图做的是能够单击一个索引并进入相应的HTML页面。每个索引都有一个URL localhost:7777/arq/x

例如,localhost:7777/arq/7应该使用arq7.html文件进行应答

目前,我有以下代码:

var http = require('http')
var fs = require('fs')

http.createServer(function (req, res){
    var num = req.url.split("/")[req.url.length-1]
    fs.readFile('arq' + num +'.html', function(err, data) {
        res.writeHead(200, {'Content-Type': 'text/html'})
        res.write(data)
        res.end()
    })
    
}).listen(7777);
console.log('Servidor à escuta na porta 7777...')
var num
是我用来解析url的东西,这样我就可以得到实际的x。我不确定是解析错误,还是我把文件位置搞砸了

另外,我得到的错误是:

_http_outgoing.js:696
    throw new ERR_INVALID_ARG_TYPE('first argument',
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer or Uint8Array. Received undefined
    at write_ (_http_outgoing.js:696:11)
    at ServerResponse.write (_http_outgoing.js:661:15)
    at ReadFileContext.callback (C:\Users\joao_\OneDrive\Ambiente de Trabalho\dataset\server1.js:8:13)
    at FSReqCallback.readFileAfterOpen [as oncomplete] (fs.js:273:13) {
  code: 'ERR_INVALID_ARG_TYPE'
}

您应该
console.log(data)
查看您得到的不是字符串或缓冲区的内容

您还应该查看
err
,以了解读取文件时是否出错

在这种情况下,有一个错误,因此
数据
未定义的

该错误是由于文件名错误引起的


req.url.split(“/”
为您提供了一个数组,但这不是您正在读取的
.length
req.url

从错误表中,您对请求url中的
num
变量的计算看起来可能是错误的。做一个
console.log(num)
,看看你到底有什么。这是基本的调试,在您来到这里之前,您应该自己进行调试。仅供参考,使用Express http server framework,所有这些都会简单得多。您可以将该数字定义为URL中的一个参数,Express将为您解析它和/或使用
Express.static()
自动为匹配的文件提供服务。
req.url.split("/")[req.url.length-1]