Node.js基础入门第七天

2023-11-15

经过前面六天的知识学习,对Node.js开发的基础知识,有了一个初步的掌握,今天继续学习Node.js后端web开发的相关知识,本篇文章作为Node.js服务端程序开发的基础入门知识,仅供学习分享使用,如有不足之处,还请指正。

创建服务端程序

通过Node.js创建web服务端程序,需要引用http模块,创建服务,并监听对应端口,如下所示:

//1.引入http模块
var http  = require('http');
//2.创建服务
var server = http.createServer();

//3. 监听请求事件,当有请求时,触发回调函数
server.on('request',function(req,res){
    //req:请求对象,包含了客户端请求的数据,请求头,请求体
    //res:响应对象,包含了所有服务端发送给客户端的数据,响应头,响应体
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"})
    res.write("<h3>Hello,Node.js</h3>");
    res.write("<span>I'am 小六公子</span>");
    res.end();
});

//4. 监听8080端口
server.listen(8080,function(){
    console.log("server is running");
});

在命令行窗口运行程序,即可启动服务,示例如下:

在浏览器中,输入网址http://http://localhost:8080/,如下则表示成功。

 注意:响应对象同时也是一个流对象,在最后一定要结束流。

端口查看

通过命令行输入netstat -abo可以查看启动端口的程序和进程ID,如下所示:

按请求路径响应内容

通过以上示例不难发现,创建web服务,只需要四步。但是在真实的需求中,会有不同的页面,那如何根据不同路径,返回不同内容呢?

后端程序可以根据访问的req.url属性,来判断用户访问的具体页面信息,来做出不同的响应,具体如下所示:

//3. 监听请求事件,当有请求时,触发回调函数
server.on('request',function(req,res){
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
    console.log(req.url);
    if(req.url==="/"){
        res.write("<span>这是首页</span>");
    }
    if(req.url==="/list.html"){
        res.write("<span>这是列表页</span>");
    }
    if(req.url==="/detail.html"){
        res.write("<span>这是明细页</span>");
    }
    res.write("<br /><span>I'am 小六公子</span>");
    res.end();
});

运行程序,如下所示:

打开浏览器,分别输入网址进行测试,如下所示:

状态码

状态码是http协议规定的服务器响应数据时的状态编码。常用的状态码如下所示:

  • 200 请求响应成功
  • 304 未修改,所请求的资源未更改
  • 404 请求的资源不存在。
  • 500 服务器内部错误。

其他状态码可参考百度百科,如下所示:

在Node.js中通过res.writeHead方法,可以返回响应头信息,其中包含状态码,如下所示:

server.on('request',function(req,res){
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
    res.write("<span>这是首页</span>");
    res.end();
});

在浏览器中,进行访问,通过监控网络即可查看状态码,即可返回消息头,如下所示:

如果程序内出现错误,则可以返回500错误,如下所示:

server.on('request',function(req,res){
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
    try{
        var t =a+1;
        res.write("<span>这是首页"+t+"</span>");
    }catch(e){
        res.writeHead(500,{"content-type":"text/html;charset=utf-8"});
    }
    res.end();
});

在浏览器打开,如下所示:

响应头

状态码是保存在响应头中的,响应头中不仅包含状态码,还包含其他内容。如下所示:

  • Content-Type响应内容的格式类型,常用Content-Type: text/html;charset=utf-8。
  • Content-Length:响应内容的长度,一般不设置,默认即可。
  • Access-Control-Allow-Origin 响应头跨域设置,默认可以设置成*号。
  • Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
  • Access-Control-Max-Age: 86400

响应头示例如下所示:

server.on('request',function(req,res){
    res.writeHead(200,{
        "content-type":"text/html;charset=utf-8",
        "Access-Control-Allow-Origin":"*",
        "Access-Control-Allow-Methods":"POST, GET, OPTIONS, DELETE",
        "Access-Control-Max-Age":86400});
    res.write("<span>这是首页</span>");
    res.end();
});

在浏览器中运行,并打开开发者工具进行监控,可以非常方便的查看响应头信息,如下所示:

构建静态网站

通过以上示例,可以看出,创建一个web服务器端程序,非常简洁,但是以上示例都是在js后端代码中,内嵌html代码,那如何实现代码分离呢?以下以静态网站为例,如下所示:

首先创建静态html页面,如下所示:

创建web服务程序,根据请求的url路径,自动读取对应的html页面文件内容并返回,如下所示:

//1.引入http模块
var http  = require('http');
var fs = require('fs');
var path = require('path');
//2.创建服务
var server = http.createServer();
var extnames = {".html":"text/html",".css":"text/css",".png":"image/png"};
//3. 监听请求事件,当有请求时,触发回调函数
server.on('request',function(req,res){

    var url=req.url;
    if(url==="/"){
        url="/index.html";
    }
    var localPath = './www'+url;
    var extname = path.extname(localPath);
    console.log(localPath);
    if(extname===".ico"){
        res.end();
    }else{
        fs.readFile(localPath,function(err,data){
            res.writeHead(200,{"content-type":""+extnames[extname]+";charset=utf-8"});
            res.write(data);
            res.end();
        });
    }
});

//4. 监听8080端口
server.listen(8080,function(){
    console.log("server is running");
});

运行程序,如下所示:

在浏览器中进行访问,如下所示:

备注

登金陵凤凰台【作者】李白 【朝代】唐

凤凰台上凤凰游,凤去台空江自流。

吴宫花草埋幽径,晋代衣冠成古丘。

三山半落青天外,二水中分白鹭洲。

总为浮云能蔽日,长安不见使人愁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js基础入门第七天 的相关文章

随机推荐

  • 【objectARX学习计划】

    按照 ObjectARX开发实例教程 pdf 学习计划 序号 模块 开发功能 是否重点 难度 学时 天 时间计划 完成情况 备注 1 创建和编辑基本图形对象 创建直线 是 容易 1 2 创建圆 是 容易 3 创建圆弧 是 容易 4 创建多段
  • 网页伸缩式导航栏(附源码)

    网页伸缩式导航栏 效果图如下 文件目录 html代码 index html
  • Kubernetes之(十九)资源指标和集群监控

    目录 Kubernetes之 十九 资源指标和集群监控 资源指标和资源监控 metrics server 部署metrics server Prometheus 概述 部署prometheus Grafana数据展示 Kubernetes之
  • .net Core竟然支持xamrain

    终于明白 net Core的意义 以前在微软推出 net Core时 我有点不明白 为啥微软要弄个阉割版的net平台 现在 刚接触 xamarin跨平台开发 发现 net Core竟然轻松支持xamrain开发安卓程序 微软微软 真是用心良
  • Linux系统常用命令

    Linux系统常用命令 一 常用快捷键 ctrl shift table 表示临时变大 ctrl table 表示临时变小 ctrl t 打开多个 一个 终端 永久生效 终端上的 edit 属性设置 ctrl l clear 清屏 ctrl
  • 2021蓝桥杯模拟赛-受伤的皇后

    题目 题目链接 题解 DFS 八皇后问题改编而已 加入判断左上三格内和右上三格内是否存在皇后 代码 include
  • MYSQL对表进行操作

    添加列 基本形式 alter table 表名 add 列名 列数据类型 after 插入位置 示例 在表的最后追加列 address alter table students add address char 60 在名为 age 的列后
  • 84. Largest Rectangle in Histogram

    84 Largest Rectangle in Histogram Given n non negative integers representing an elevation map where the width of each ba
  • 组合预测模型

    组合预测模型 MLP RF多层感知机结合随机森林多输入单输出回归预测 Matlab程序 目录 组合预测模型 MLP RF多层感知机结合随机森林多输入单输出回归预测 Matlab程序 预测结果 评价指标 基本介绍 程序设计 参考资料 预测结果
  • 【Java基础】之深入理解四中访问权限

    这篇文章将深入讲解Java的四种访问权限 访问权限介绍 访问权限控制指的是 本类及本类内部的成员 成员变量 成员方法 内部类 对其他类的可见性 即这些内容是否允许其他类访问 Java 的访问权限一共有四种 public protected
  • iOS提交审核时报错:您必须为要添加的 App 提供版权信息

    可以随便填 但是必填 否则被拒 很耽搁时间
  • java面向对象超详细总结(期末必备)

    文章目录 面向对象 什么是对象 对象的组成 类是什么 类的组成 类的创建语法 类的使用 使用类必须为类创建对象 调用属性 调用方法 方法的重载 构造方法 构造函数 构造器 构造器的语法 对象的引用 this关键字 OOP练习 练习一 案例代
  • LINQ的基本使用

    一 什么是LINQ 长期以来 开发社区形成以下的格局 1 面向对象与数据访问两个领域长期分裂 各自为政 2 编程语言中的数据类型与数据库中的数据类型形成两套不同的体系 例如 C 中字符串用string数据类型表示 SQL中字符串用NVarc
  • 静态代码检测遇到的一些问题总结

    393 S Single parameter constructor not explicit 原因 只有一个参数的构造函数存在隐式类型转换的可能 解决方法 在单参数构造函数之前添加 explicit 例子 class test publi
  • HTML5中的save()和restore()方法的用法

    HTML5中的save 和restore 方法的用法 1 save 方法将当前的绘图环境压入堆栈顶部 2 restore 方法将从栈顶部弹出的一组状态信息 并根据此恢复当前绘图环境的各个状态
  • OpenWrt入门完美教程

    近来由于毕业设计需要用到摄像头模块 考虑利用 OpenWrt UVC mjpg streamer 方案驱动摄像头模块 学习了一篇很好的OpenWrt入门美文 原文链接如下 http zhidx com p 186 html 从零开始学习Op
  • 【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程

    2021年12月9日更新 可查看本人最新的CUDA环境配置博客 https zhuanlan zhihu com p 443114377 系对本文的提炼 归纳与总结 目录 环境配置流程总结 2021年6月10日更新 重要概念 务必看 写在开
  • 数字信号处理第二次试验:时域采样与频域采样

    数字信号处理第二次试验 时域采样与频域采样 前言 一 实验目的 二 实验原理与方法 三 实验环境 四 实验内容及步骤 五 实验结果截图 含分析 实验程序运行结果及分析讨论 六 思考题 想说点啥 前言 为了帮助同学们完成痛苦的实验课程设计 本
  • js去掉字符串的空格

    1 trim方法 过滤字符串两端的空格 var str xin xiang console log str trim xin xiang trim 是最常用的方法 也是最方便的方法 缺点 只能去除字符串两端的空格 不能去除中间的空格 2 r
  • Node.js基础入门第七天

    经过前面六天的知识学习 对Node js开发的基础知识 有了一个初步的掌握 今天继续学习Node js后端web开发的相关知识 本篇文章作为Node js服务端程序开发的基础入门知识 仅供学习分享使用 如有不足之处 还请指正 创建服务端程序