Node.js基础入门第七天

简介: Node.js基础入门第七天

经过前面六天的知识学习,对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");
});

运行程序,如下所示:

f5d6d311414168204add0c76cb49faa1.png

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

46a7f6ba69c32d37d5afbfb0b00450bb.gif

备注

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

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

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

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

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

相关文章
|
11月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
2956 2
|
6月前
|
JSON JavaScript 前端开发
菜鸟之路Day23一一JavaScript 入门
本文介绍了 JavaScript 的基础内容,包括 JS 的引入方式、基础语法、数据类型、运算符、类型转换、函数、对象(如 Array、String、自定义对象、JSON、BOM 和 DOM)、事件监听,以及 Vue 框架的初步使用。重点讲解了内部和外部脚本的引入、变量声明(var、let、const)、常见输出语句、数组与字符串的操作方法、DOM 操作及事件绑定,并通过实例展示了 Vue 的双向数据绑定和常用指令(v-bind、v-model、v-on、v-if、v-for 等)。
159 7
|
9月前
|
JavaScript 前端开发
【JavaScript】——JS基础入门常见操作(大量举例)
JS引入方式,JS基础语法,JS增删查改,JS函数,JS对象
|
10月前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
453 10
|
12月前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
619 5
一小时入门Vue.js前端开发
|
10月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
1344 1
|
10月前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
410 0
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
11月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
11月前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
146 1
|
11月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
1923 1