服务器跨过public文件夹获取内部数据
此时请求主页面时需要写文件夹名. 如下图所示:
以上操作较为繁琐,为求简单便捷希望直接输入文件名甚至不输入文件名
node创建服务器的基本步骤:
http为node核心模块,不用下载,直接引用即可。
// 引入http const http = require('http')
使用http的createServer方法,方法内只有一个回调函数
req为请求,res为响应
// http创建一个服务器 req为请求,res为响应 const server = http.createServer((req, res) => { // 返回ok查看 res.end('ok') })
设置监听,注意端口号不要冲突。
// 监听8080端口 server.listen(8080, () => { // 连接成功log提示 console.log('8080端口监听中....'); })
现阶段代码如下:
此时就可以访问测试:
以上简单的node服务器就搭好了,但仍需优化。
引入fs与path核心模块
// 引入fs const fs = require('fs') // 引入path const path = require('path')
使用fs读取文件,如果读取不到响应无法访问
否则返回data(自动为buffer格式)
const server = http.createServer((req, res) => { fs.readFile(path.join(__dirname, req.url), (err, data) => { // 判断:如果有错误,说明文件不存在,否则返回data(自动为buffer格式) if (err) { // 设置响应码 res.statusCode = 404 // 设置响应头 因为下面的响应内容为中文,设置utf8 res.setHeader('content-type', 'text/css;charset=utf8') res.end('无法访问') } // 将数据返回 res.end(data) }) })
此时可以做到访问index.html
如果端口后面没有内容,req.url返回的是 /
所以第二行如果req.url等于 / 就返回index.html
使用path方法拼接访问路径
const server = http.createServer((req, res) => { let url = req.url == '/' ? 'index.html' : req.url // 使用path.join方法拼接地址复制给filePath filePath const filePath = path.join(__dirname, 'public', url) // 使用fs方法读取文件。 fs.readFile(filePath, (err, data) => { // 判断:如果有错误,说明文件不存在,否则返回data(自动为buffer格式) if (err) { // 设置响应码 res.statusCode = 404 // 设置响应头 因为下面的响应内容为中文,设置utf8 res.setHeader('content-type', 'text/css;charset=utf8') res.end('无法访问') } // 将数据返回 res.end(data) }) })
最终段代码如下:
// 引入http const http = require('http') // 引入path const path = require('path') // 引入fs const fs = require('fs') // http创建一个服务器 req为请求,res为响应 const server = http.createServer((req, res) => { let url = req.url == '/' ? 'index.html' : req.url // 使用path.join方法拼接地址复制给filePath filePath const filePath = path.join(__dirname, 'public', url) // 使用fs方法读取文件。 fs.readFile(filePath, (err, data) => { // 判断:如果有错误,说明文件不存在,否则返回data(自动为buffer格式) if (err) { // 设置响应码 res.statusCode = 404 // 设置响应头 因为下面的响应内容为中文,设置utf8 res.setHeader('content-type', 'text/css;charset=utf8') res.end('无法访问') } // 将数据返回 res.end(data) }) }) // 监听8080端口 server.listen(8080, () => { // 连接成功log提示 console.log('8080端口监听中....'); })