Nodejs服务器跨文件夹获取数据

 服务器跨过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端口监听中....');
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值