服务器跨过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服务器就搭好了,但仍需优化。
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
Nodejs服务器跨文件夹获取数据:
如果端口后面没有内容,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端口监听中....'); })