《node.js实战》第四章(4.4—4.5) 构建web程序

Docker实战案例:构建并部署一个Node.js Web应用 在当今快速迭代的软件开发环境中,容器化技术以其轻量级、可移植性和高效资源利用等特性,成为了开发和运维团队不可或缺的工具。Docker作为容器技术的佼佼者,极大地简化了应用的打包、分发和部署流程。本文将通过一个完整的Node.js Web应用案例,展示如何使用Docker从代码编写到部署的全过程。 阅读详情

4.4 从表单接受用户输入

 4.4.1 处理提交的表单域

application/x-www-form-urlencoded:这是html表单的默认值

multipart/form-data:在表单重含有文件或二进制数据时使用


首先要实现一个支持GET和POST的服务器

var http = require('http');
var fs = require('fs');
var items = [];

var server = http.createServer((req, res)=>{
    if ('/' === req.url) {
        switch (req.method) {
            case 'GET':
                show(res);
                break;
            case 'POST':
                add(req, res);
                break;
                default:
                    badRequest(res);
        }
    }else{
        notFound(res);
    }

})

 

实现show函数

function show(res){
    var file = fs.readFileSync('./t.html').toString();
    file = file.replace('%',items.join('</li><li>'));
    res.setHeader("content-type",`text/html; charset="utf-8"`);
    res.end(file);
}

<html>
<ul>
    <li>%</li>
</ul>
<form method="POST" action="/">
    <p><input type="text" name="item1" /></p>
    <p><input type="submit" name="item" value="l啦啦啦啦" /></p>
</form>
<html>

实现两个错报函数

function notFound(res){
    res.statusCode = 404;
    res.setHeader('content-type','text/plain');
    res.end('node found');
}

function badRequest(res){
    res.statusCode = 400;
    res.setHeader('content-type','text/plain');
    res.end('bad request');
}

 最后实现last函数

const querystring = require('querystring');

function add(req,res){
    var body = '';
    req.on('data',(chunk)=>{
        body+=chunk;
    })
    req.on('end',()=>{
        let value = querystring.parse(body);
        items.push(value.item1);
        show(res);
        
    })
}

 这个例子只处理application/x-www-form-urlencoded值,解析数据只需要把data事件数据拼接到一起。

附 处理标题提交乱码问题

前端表单含有中文会导致乱码,就是这种格式:

t1=%E7%9A%84%E7%91%9E%E7%89%B9%E8%AE%A9%E4%BB%96

 其实这个只是decodeURI后的格式,只需要使用decodeURIComponent()函数解码就好拉~

其中包括这两个函数编码和解码

let encode = encodeURIComponent("啦啦啦");
console.log(encode);    //%E5%95%A6%E5%95%A6%E5%95%A6
let decode = decodeURIComponent(encode);
console.log(decode);    //啦啦啦

4.4.2 使用formidable处理上传的文件

上传文件必须要用multipart/form-data属性提交表单。

    <form method='POST' action="/" enctype="multipart/form-data">
        <p><input type="text" name="name"></p>
        <p><input type='file' name="file"></p>
        <p><input type="submit" value="upload"></p>
    </form>
var fs = require('fs');
var http = require('http');
var server = http.createServer((req, res) => {
    switch (req.method) {
        case 'GET':
            show(req,res);
            break;
        case 'POST':
            upload(req, res);
            break;
    }
});

server.listen(8000);

function show(req,res){
    res.setHeader("content-type",'text/html; charset="utf-8"');
    var file = fs.readFileSync('./t.html');
    res.end(file);
}

var formidable = require('formidable');

function upload(req,res){
    if(!isFormData(req)){
        res.statusCode = 400;
        res.end('bad request');
        return
    }


    var form = new formidable.IncomingForm();
    form.encoding = 'utf-8';        //编码格式
    form.uploadDir = './tmp';       //设置目录
    form.keepExtensions = true;     //保存文件后缀
    
    //field在收完输入域后触发
    form.on('field',function(field,value){
        console.log(field);
        console.log(value);
    });

    //在接受完文件后触发
    form.on('file',function(name,file){
        
    })

    form.on('end',function(){
        res.end('upload complete!');
    })

    form.parse(req);
}

function isFormData(req){
    var type = req.headers['content-type'] || '';
    return 0 == type.indexOf('multipart/form-data');
}


 

Node.js Web应用构建:Express+MySQL+Redis+log4js MySQL是一种关系型数据库管理系统,由瑞典MySQL AB公司开发,现属于甲骨文公司。它是基于客户端-服务器模型和SQL(结构化查询语言)的数据管理系统。由于其开源、高性能、可靠性和易用性,MySQL被广泛应用于互联网项目和企业级应用中。连接池是创建和管理数据库连接的一种技术,能够减少创建和关闭数据库连接的时间开销。使用连接池可以显著提升Web应用的性能和可伸缩性。在本章节中,我们探讨了MySQL数据库的基础知识,包括安装、创建数据库和表、以及数据操作。接着深入讨论了查询优化的重要性和实施策略。 阅读详情

相关推荐

Node.js与JavaScript的MOOC实战练习部署

本文还有配套的精品资源,点击获取 简介:本压缩包聚焦于Node.js的实战练习,特别适合于已完成MiriadaX课程的学习者。Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,允许开发者用JavaScript进行服务器端编程,简化了网络应用的构建。其中可能包括了使用Heroku云平台部署JavaScript和Node.js开发的Web应用程序的...

weixin_36369848的博客 1730

第4章课后题参考答案

分析:由于没有全称量词,故转化为等价的存在量词为:查询这样的供应商名字,没有一个零件是他不供应的。分析:由于没有全称量词,故转化为等价的存在量词为:查询这样的学生名称,没有一门课程是他不选择的。where p1.pname = '螺母' and p1.color=p2.color;Where spj.sno = s.sno and s.city = ‘北京’;and color = '红';and city = '北京';and color ='红');and city = '北京'

weixin_43465508的博客 911

基础Node.js Web服务器与HTML站点构建

本文还有配套的精品资源,点击获取 简介:Site项目是一个结合Node.js和HTML构建的基础Web平台,通过Node.js提供动态交互功能,同时利用HTML和外部资源文件(CSS和JavaScript)增强网页的结构、样式和交互性。项目包括核心文件如index.html、server.js、styles.css和script.js,以及可能的其他静态资源,适合初学者和快...

weixin_42608299的博客 2452

nodejs下基于express实现post4种方式提交参数

post

qq591840685的专栏 2013

基于Node.js与Python的Web直播程序项目实战

Web直播技术作为实时音视频传输的典型应用,已广泛渗透到在线教育、电商带货、赛事转播等多个领域。其核心在于通过互联网将音视频内容即时传输至终端用户,实现低延迟、高并发的互动体验。本章将从Web直播的基本概念出发,梳理其发展脉络,剖析主流技术架构,并介绍系统构建中的关键组件,如前端采集、流媒体服务器、传输协议与用户控制机制。通过对这些基础内容的讲解,为后续章节中涉及的Node.js服务器搭建、WebSocket通信、FFmpeg编码等技术实践,打下坚实的理论基础。

weixin_31720909的博客 966

基于Node.js的Web端作业提交系统实战项目

Node.js 是一种使用 JavaScript 运行在服务端的平台,与浏览器中的 JavaScript 不同,Node.js 的运行环境不依赖于浏览器。它能够读写文件,处理网络请求等。Node.js 的包管理工具 npm(Node Package Manager)是 JavaScript 开发领域内使用最广泛的包管理器。安装 Node.js 的推荐步骤如下:访问 Node.js 官网下载最新版本的 Node.js 安装包。执行下载的安装包,选择安装路径。

weixin_42174098的博客 619

《node.js实战》第四章(4.1—4.3) 构建web程序

和php之类的语言或者其他框架比较,node的api比较底层,而且node的HTTP接口一样比较底层, 不过这是为了保证他的速度和灵活性。 服务器收到一条http请求,都会都使用新的req和res对象请求回调函数。在触发回调函数之前,node会解析请求的http头,并将它们作为req对象的一部分提供给请求回调。调用完之后,node会一直等待res.end()方法,如果没有res.end()客户端会一直等待。 创建标准的REST服务器需要实现四个HTTP谓词。GET(获得)POST(改变/传输)PUT(

nullccc的博客 243

Node.js 演示应用程序:从零开始构建

本文还有配套的精品资源,点击获取 简介:Node.js 是一个强大的 JavaScript 运行环境,适用于服务器端编程和构建实时数据密集型应用。本演示应用程序 "node-demo-app" 是一个教学示例,通过实践演示如何利用 Node.js 的核心特性,如非阻塞 I/O、事件驱动编程和模块系统,来构建一个完整的 Web 应用程序。它包括了项目文件结构分析、Expres...

weixin_31315007的博客 781

[Nodejs]解析表单数据(x-www-form-urlencoded)

在解析x-www-form-urlencoded数据时,使用querystring提示已被弃用。查阅资料后得知可以使用 URLSearchParams 对象进行解析,代码如下 // 解析表单数据的全局中间件 app.use((req, res, next) => { let str = ''; req.on('data', chunk => { str += chunk; }) req.on('end', () => {

sOSystem的博客 2466

基于Node.js的高效Web应用构建框架指南

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 来编写服务器端的应用程序。Node.js 最初由 Ryan Dahl 在 2009 年发布,它的出现颠覆了传统的后端开发模式,因其独特的事件驱动、非阻塞 I/O 模型而迅速获得广泛关注和应用。

weixin_33481022的博客 1105

Simulink实战:5步搞定固定翼飞行器六自由度动力学建模(附模型下载)

本文提供了一份详细的Simulink实战指南,通过5个核心步骤手把手教你构建固定翼飞行器的六自由度动力学模型。内容涵盖从顶层架构设计、核心方程手动实现,到模型集成、测试调试及进阶优化的完整流程,旨在帮助航空航天学生和工程师将抽象理论转化为可运行的仿真模型,并附有模型下载。

perl8的博客 635

Node.js 解析request.body请求体参数

上篇文章我们完成了Node.js客户端与服务端基本交互,并通过get请求实现客户端传参,服务端相应逻辑处理数据 今天我们用post请求,客户端传参,服务端处理 先创建一个json文件,通过fs模块,读取文件内容,注意设置编码格式UTF8 user.json [ { "userId": 1, "userName": "小张", "des": "我是小张" }, { ...

一只路过的小码农 1万+

鼎阳示波器SCPI指令与MD5算法解锁带宽升级实战

本文详细介绍了鼎阳示波器通过SCPI指令与MD5算法实现带宽升级的实战流程。从设备连接、信息获取到Python密钥生成脚本解析,逐步指导用户完成升级操作,并涵盖常见问题排查与功能选件激活指南,帮助用户充分释放设备潜能。

www00的博客 353

使用node.js构建一个web服务器(适合自学)

先介绍node.js的安装,再介绍使用node.js构建一个简单的web服务器,最后通过一个简单的示例,演示网页与服务器之间的数据交互的实现。

cnds123的专栏 3万+

(一)企业微信 - 会话内容存档

企业微信获取会话记录。

专打丶小豆豆的博客 2894

傻白入门芯片设计,芯片键合(Die Bonding)(四)

傻白入门芯片设计,芯片键合(Die Bonding)(四) 引线键合、倒装芯片键合、管脚贴合技术

qq_46675545的博客 3万+

Web前端高级工程师培训:使用 Node.js 构建一个 Web 服务端程序(1)

WebServer,也称为网页服务器,通俗来讲就是提供 网页浏览器服务的机器。通常Web资源(html、css、js、images……)都会存放在一个指定的 服务器 中,然后通过特定的软件 (),如,来提供访问服务。访问模式首先由客户端(浏览器)发送一个请求,通过网络连接到提供Web服务的机器,会监听到客户端请求,并根据请求作出处理,返回对应的资源。

weixin_50556117的博客 1490

2024年数字IC秋招-速腾聚创-数字芯片验证工程师-笔试题

笔试题型:单选 + 问答题笔试平台:牛客(手机+电脑监控)笔试时间:1hA. len取10的概率是1/2;B. len取10的概率是1/3;C. len取10的概率是1/4;D. len取10的概率是1;

qq_42135020的博客 1400

【优质书籍推荐】Vue.js+Node.js全栈开发实战

本文深入讲解了全栈开发巨作:《Vue.js+Node.js全栈开发实战(第2版)》,希望能对学习Java的同学们有所帮助。 文章目录 1. 前言 2. 书籍推荐 2.1 内容简介 2.2 本书特色 2.3 作者简介 2.4 本书目录 2.5 适合读者 3. 购买链接

weixin_43178406的博客 1万+

复合材料成型仿真案例大全|覆盖模压 / RTM / 固化 / SMC,实操步骤直接抄

本文整理了一套完整的PAM-COMPOSITE复合材料成型仿真案例合集,涵盖模压、RTM、固化变形、SMC四大核心工艺,包含6个实操案例和1个全流程衔接案例。每个案例都配有详细的操作步骤、核心要点和缺陷排查方法,适用于不同水平的工程师和研究人员。案例内容源自实际项目,可直接复用,帮助用户快速掌握复合材料成型仿真的关键技术,解决褶皱、纤维堆积、气泡残留等常见问题,实现从铺层设计到强度校核的全流程仿真闭环。特别针对热固性/热塑性材料差异、RTM衍生工艺、链式仿真等难点提供了专项解决方案。

源代码杀手的博客 320

Linux内核驱动模型--PCIe(PCI Express)驱动​​

本文系统介绍了Linux内核中PCIe驱动的设计与实现。首先从架构定位入手,指出PCIe驱动基于PCI子系统扩展支持高速、低功耗特性。核心数据结构struct pci_driver包含设备匹配表id_table、生命周期函数probe/remove等关键组件。文章详细解析了驱动与设备的绑定流程、资源管理机制,并重点阐述了MSI-X中断、电源管理、热插拔和多队列等高级特性实现方案。最后提供了lspci、dmesg等调试工具的使用方法,总结了PCIe驱动在支持高性能设备中的关键作用。全文通过架构设计、核心结构、

amy_mhd的博客 428

node.js 初识node.js,运行在服务端的 JavaScript(一)

文章目录1.浏览器原理2.浏览器访问服务器过程3.web开发本质4.什么是node.js?5.node.js有哪些特点?6.安装Node.js 1.浏览器原理 2.浏览器访问服务器过程 https://edu.aliyun.com/lesson_1730_14083?spm=5176.10731542.0.0.4fb815f2VGm9PU#_14083 请求报文和相应报文。 3.web开发本质 一般web都是下面三点一样: 1.请求,客户端发起请求。 2.处理,服务器处理请求。 3.响应,服务器将处理结果

探索技术与实践的旅程,分享编程经验与工具使用心得,助力开发者提升技能。 1万+

EMC基础知识总结

电磁干扰(Electromagnetic Interference),简称EMI,有和两种。传导干扰主要是电子设备产生的干扰信号通过导电介质或公共电源线互相产生干扰;辐射干扰是指电子设备产生的干扰信号通过空间耦合把干扰信号传给另一个电网络或电子设备。

学海无涯的专栏 1370

使用Node.js构建Web应用程序

介绍 除了构建API,Node.js还非常适合构建标准的Web应用程序。 它具有功能强大的工具,可满足Web开发人员的需求。 在本教程中,您将构建一个可以用作本地库的Web应用程序。 在构建过程中,您将了解某些类型的中间件,您将看到如何在Node.js中处理表单提交,并且还可以引用两个模型。 让我们开始吧。 入门 首先在计算机上安装Express Generator。 npm i...

代码教主 623

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

使用 Koa.js 构建轻量级 Web 应用:从入门到实战

Koa.js 是一个由 Express 团队创建的 Web 框架,旨在提供一个更加灵活且精简的开发体验。Koa.js 并不直接提供大量的内建功能,而是通过中间件的方式提供扩展性,允许开发者按需添加功能。这使得 Koa.js 的性能和可定制性非常高,特别适用于构建轻量级、模块化的应用。Koa.js是一个轻量级的 Web 框架,通过现代化的中间件机制和提供了高效的开发体验。我们通过安装和配置 Koa.js,创建了一个简单的 Web 应用,并使用koa-router实现了路由管理。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 3644

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Node.js 是什么?Node.js与JavaScript的区别是什么?

node.js是什么?Node.js是一个Javascript运行环境(runtime)。Node.js与JavaScript的区别是什么?本质:     Javascript是一种web前端语言,主要用于web开发中,由浏览器解析执行     Node.js是一个可以快速构建网络服务及应用的平台,是用Javascri...

吴甜甜的技术博客 3万+
上一篇: 《node.js实战》第四章(4.1—4.3) 构建web程序
下一篇: 《node.js实战》第六章 connect中间件
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值