• node(一)


    目录

    1.http模块

    参数req 和 res代表什么?

     fs模块


    1.命令提示符 cmd.exe 这个软件中输入window的指令:node index.js 

    意思是:node 就是去环境变量中找到这个node变量指向软件node.exe,然后用node.exe 这个软件去运行index.js

    1.http模块

    如何写一个简单的http服务器

    1. //引入node自带的模块 http 这个模块可以调用函数,来创建后端服务器
    2. var http = require('http');
    3. //创建一个服务器对象,回调函数不会直接运行,会在用户每次访问当前计算机的ip下的8081端口时才可
    4. var app = http.createServer((req,res)=>{
    5. //配置返回给用户(前端)的数据包 的数据格式 和编码的类型 utf8
    6. res.setHeader('content-Type','text/html;charset=utf8')
    7. //给前端最后一次发生数据包
    8. res.end('你好啊,66666');
    9. })
    10. app.listen(8081); //监听端口8081 每个程序都有一个端口号

    然后在当前js文件目录里面,调出cmd,然后输入

     

     当用户访问服务器app的8081端口,回调函数就会返回一个   

    浣犲ソ鍟�,66666      这明显是一个乱码,乱码是因为传输的有中文

    那为什么有中文就会出现乱码呢? 

    因为前端请求服务器,然后后端就会返回一个数据包,然后前端对其进行解码,没有设置 字符集,所以解码出来的是乱码。

    解决乱码:

    res.setHeader('content-Type','text/html;charset=utf8')

     在头部设置一下:text/css就是css文本格式编码,text/html就是html文本格式编码,charset=utf8 就是遵从utf8字符集进行解码。

    参数req 和 res代表什么?

    req (require:请求):前端发送过来的数据包   其中信息包括:浏览器本地的缓存,在浏览器输入的网址 等。

    这个数据包传到后端后就放到 req 中  ,req是一个对象(很大),其中 req.url属性就是 在浏览器输入的网址

    res(result):后端发送回去的数据包

    所以:只有ip地址和端口写对了,就一定会运行:

    1. var app = http.createServer((req,res)=>{
    2. //配置返回给用户(前端)的数据包 的数据格式 和编码的类型 utf8
    3. res.setHeader('context-Type','text/html;charset=utf8')
    4. //给前端最后一次发生数据包
    5. res.end('你好啊,66666');
    6. })

    所以,根据浏览器输入网址端口后面部分的不同,后端返回给前端的数据也就不同

    1. var http = require('http');
    2. var app = http.createServer((req,res)=>{
    3. res.setHeader('content-Type','text/html;charset=utf8');
    4. if(req.url == '/car'){
    5. res.end('666');
    6. }else if(req.url == '/home'){
    7. res.end('你好啊,欢迎回家');
    8. }else{
    9. res.end('not 404');
    10. }
    11. });
    12. app.listen(8081);

    如果不写返回 res.end();就会:

     分析:前端与后端的通道,前端发生给后端数据包后,后端没把处理的数据包返回给前端,所以前端就会等待(一直转圈圈)。

    如果过一段时间后端还是没有 res.end() 返回。那么浏览器就会自动判断,不会返回了,就会出现下面的页面:

    问题:下面代码中,为什么浏览器输入:192.168.6.141:8081/home 会得到

    1. var http = require('http');
    2. var app = http.createServer((req,res)=>{
    3. console.log(req.url);
    4. if(req.url == '/home'){
    5. res.end('666666666');
    6. }else{
    7. res.end('not found');
    8. }
    9. });
    10. app.listen(8081);

    结果: 

     

     

    分析:打印出2个 req.url 说明 回调函数执行了两次,第一次打印出 /home这个不难理解,就是用户输入的网址中的 /home ,那么/favicon.ico又是怎么回事呢? 是因为浏览器会自发的请求这个小图标

     

    但是后端返回的是'not found' 这个字符串,浏览器不会把字符串拿去做小图标,所以就会用浏览器自带的小图标。 浏览器自带的小图标 就是 /favicon.ico

     

     fs模块

    引入系统自带的模块 fs  file system

    var fs = require('fs');

    读取文件 fs.readFile();

    1. fs.readFile('./pic1.png',(err,data)=>{
    2. });

     分析:这个函数两个值,一个是文件路径, 一个是回调函数,不管文件读取是否成功,回调函数都会成立,读取成功,data有值,读取失败,err有值

    1. var http = require('http');
    2. var fs = require('fs');
    3. var app = http.createServer((req,res)=>{
    4. if(req.url == '/666'){
    5. fs.readFile('./pic1.png',(err,data)=>{
    6. if(!err){ //读取成功err就没有值, !err 有值 执行if里面代码
    7. res.end(data);
    8. }
    9. })
    10. }
    11. });
    12. app.listen(8081);

    浏览器输入网址: 192.168.6.80:8081/666   就能读取出图片。

    案例:访问以前写的html+css静态网页

    1. var http = require('http');
    2. var fs = require('fs');
    3. var app = http.createServer((req,res)=>{
    4. //前端的每一次网络请求,这个函数都会重新运行一次
    5. if(req.url == '/home'){
    6. fs.readFile('./index.html',(err,data)=>{
    7. res.setHeader('content-Type','text/html;charset=utf8');
    8. res.end(data);
    9. })
    10. }else if(req.url == '/123'){
    11. res.setHeader('content-Type','text/html;charset=utf8');
    12. res.end('123');
    13. }else if(req.url == '/pic.png'){
    14. //返回 图片文件 不同的文件,类型不一样
    15. res.setHeader('content-Type','image/png');
    16. res.readFile('./pic1.png',(err,data)=>{
    17. res.end(data);
    18. });
    19. }
    20. else{
    21. res.end('404');
    22. }
    23. });
    24. app.listen(8081);

    分析:3个网页,一个是返回 一个html网页,一个返回 123 ,一个返回 图片

    根据浏览器输入的网址不同,结果不同。

    浏览器加载图片,并不是浏览器网址一输入进去,图片就显示在网页上,而是浏览器遇到img标签的src属性,然后去到src属性地址中把图片加载过来。

  • 相关阅读:
    springboot整合Mongodb
    前端面试题之【CSS】
    Makefile入门(三)
    Taro进阶
    华为率先商用卫星通信技术,有助中国在6G技术上取得领先优势
    软件系统等保方案,市政项目,投标项目必须
    spring三级缓存
    DSPE-PEG-Biotin,CAS:385437-57-0,磷脂-聚乙二醇-生物素线性异双功能试剂
    【运维笔记】linux同步时间
    dosbox调试模式下0000:0000地址中内容被修改的原因
  • 原文地址:https://blog.csdn.net/weixin_47075145/article/details/126018600