2021-08-11

路径问题

node 中使用相对路径会存在一定的问题:相对路径不是相对js所在文件,而是相对命令行打开的目录。

__dirname:当前文件所在目录的绝对路径。

在node中只要涉及路径,以后都使用绝对路径。

// console.log(__dirname);
const fs = require("fs");
// E:\H5\代码\06_javascript\0729 node
// console.log(__dirname+"/exercise/a.txt");
fs.readFile(__dirname+"/exercise/a.txt","utf8",(err,data)=>{
  if (err) {
    console.log(err);
    return;
  }
  console.log(data);
})

path模块

**概念:**处理和转换文件路径的方法。
导入:require(“path”)
在不同的操作系统下,路径分隔符是不同的,window 下是/ \ linux 是/

字符串拼接也不够灵活

以后的路径拼接都用path下的join方法。

extname(路径) 获取路径中文件的扩展名

basename(路径,ext) 返回路径中最后一部分
ext 可选 文件的扩展名
如果ext不为空,则返回的是路径中的文件名,不包含扩展名

const fs = require("fs");
const path = require("path")
// fs.readFile(__dirname+"./exercise/a.txt","utf8",(err,data)=>{
// fs.readFile(path.join(__dirname,"exercise/a.txt"),"utf8",(err,data)=>{
//   if (err) {
//     console.log(err);
//     return;
//   }
//   console.log(data);
// })

// console.log(path.extname("E:\\H5\\代码\\06_javascript\\0729 node\\01exercise.html"));
console.log(path.basename("E:/H5/代码/06_javascript/0729 node/"));

网络基本概念

上网本质上是获取网络上的资源。

服务器:专门用来传输数据的电脑。

IP地址:每台电脑在互联网中的地址。 一般为4位数字 0-255 127.0.0.1表示本地。

公网IP 唯一的

局域网IP 当前局域网下的IP

域名与IP的关系

域名相当于人的名字,IP相当于身份证号。 IP是没有规律的一串数字,不好记忆。所以推出了域名,域名可以自定义,方便记忆。

DNS:将域名解析为IP地址。

DNS劫持

端口:用来区分服务器电脑中提供的不同服务。

报文:在http请求和响应的过程中传递的数据块叫做报文。
报文包含要传输的数据和一些附加信息。

报文:
请求报文:请求行 请求头 请求体
响应报文:响应头,响应体

node服务器

请求行中:请求方式 和 请求路径 参数
响应: 状态码 响应内容

200 响应成功
404 资源不存在
500 服务端错误
301 重定向

ip:127.0.0.1
域名:localhost localhost这个域名会解析为当前电脑的ip。

局域网下的ip:cmd中输入ipconfig
请求:客户端给服务端发送数据
相应:服务端返回给客户端数据

在开发过程中,客户端和服务端可以使用同一台电脑。

服务器电脑上会安装web服务器软件,Apache等。 通过安装这些软件,可以让一台普通电脑变为服务器。

在node.js中,我们不需要这些软件,可以通过http内置模块,轻松搭建服务器。

createServer方法

createServer(参数1,参数2)
创建一个服务器实例。该方法需要一个回调函数,回调函数又有两个形参。
第一个参数表示请求信息对象,一般用req,request表示。
第二个参数表示 响应信息对象 一般用 res response表示

end方法表示将内容响应给客户端。

listen监听

listen(参数1,参数2)
服务端启动必须添加端口监听。
第一个参数:该服务的端口号
第二个参数:启动成功后的回调函数,在启动成功后会立即执行。
【注意】只要js文件发现了变化,如果想要修改生效,就需要重启服务器。

const http = require("http");
// req 请求信息对象
// res 响应信息对象
http.createServer((req,res)=>{
  // 处理中文乱码
  res.setHeader("Content-type","text/html;charset=utf-8");
  res.end("<h1>你好,世界</h1>");
}).listen(3001,()=>{
  console.log("服务器已启动!");
})

响应页面案例

const fs = require("fs");
const http = require("http");
const path = require("path");

http.createServer((req,res)=>{

  fs.readFile(path.join(__dirname,"/demo/a.html"),"utf8",(err,data)=>{
    if (err) {
      res.end(err);
      return;
    }
    res.end(data);
  })
}).listen(3000,()=>{
  console.log("服务器已启动!");
})

路由

路由:服务端会根据用户输入的不同路径和请求方式的不同,响应不同的内容。

路由组成:请求方式和请求路径 get

需求:
用户输入index或者什么也不输入 显示首页
输入login 显示登录页
输入details 显示详情页
除此之外 显示404

write:一次拼接 可以多次调用。
end 直接返回响应内容 在它之后不可以跟write和end方法了 一个请求中只能调用一次。

//const http = require("http");
//http.createServer((req, res) => {
    //res.setHeader("Content-type", "text/html;charset=utf-8;")
    //const url = req.url;
    //res.write("这是write方法1\n") //追加
   // res.write("这是write方法2\n")
   // if (url == "/login") {
       // res.end("这是登录页");
   // } else if (url == "/details") {
        res.end("这是详情页")
    //} else if (url == "/" || url == "/index") {
       // res.end("这是首页")
   // } else {
        //res.end("页面被小狗叼走了!");
    //}
    // // res.end("hello") 不能再写,报错

//}).listen(3000, () => {
    //console.log("server is running");
//})

const http = require("http") //协议模块
const fs = require("fs") //文件模块
const path = require("path") //路径模块
    //搭建服务器  请求,响应
http.createServer((req, res) => {
    //解决中文乱码
    res.setHeader("Content-type", "text/html;charset=utf-8;")
    const url = req.url;
    //文件路径
    let fpath = path.join(__dirname, "./demo", url);
    //读取文件
    fs.readFile(fpath, "utf8", (err, data) => {
        if (err) {
            res.end("<h1>页面加载异常</h1>")
        } else {
            res.end(data);
        }
    })
}).listen(3000, () => {
    console.log("服务器已启动!");
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值