【Node.js】一篇文章带你直接上手JavaScript服务端编程

news/2024/7/19 15:48:19 标签: js, nodejs, javascript, web
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

你需要先学习的

1)什么是Node.js?(戳这里:《【Node.js】一篇文章带你彻底理解Node.js及其特性》)

2)安装Node.js。(node -v如果得到版本号,则安装成功)

 
 

js_9">Node.js模块化

每个文件就是一个模块(module),有自己独立的作用域。也就是说,在一个文件里定义的变量、函数、类都对其他文件不可见。

你可能会有疑问,一个js文件对另一个js文件不可见,这不是废话吗?注意,这里我们讨论的后端的js,而不是前端的js

虽然一个模块对外界不可见,但我们可以通过 exports 向外进行暴露,并在另一个模块中使用 require 进行加载。下面进行演示:

javascript">demo1.js ----------------------------------------------------------------------------------

exports.add = function (a, b) {
    return a + b;
}
javascript">demo2.js ----------------------------------------------------------------------------------

var demo = require("./demo1");
console.log(demo.add(100, 200));

js已经脱离了前端,所以我们不依托html文件即可演示js文件:

>>> node demo2.js

 
module.exports和exports有什么区别?(⭐️)

exports用于暴露属性和方法,module.exports用于暴露对象。

但是,二者尽量不要混用。如果先使用exports,再使用module.exports,会使得 exports 上暴露的属性或者方法失效。原因在于,exports 仅仅是 module.exports 的一个引用,修改 module.exports 就是修改了被引用的本体。

 
 

web_46">创建web服务器

web服务端开发还是这几步,只不过实现语言是JavaScript而已:

① 创建服务器

② 设置监听端口

③ 接收请求 & 业务逻辑处理 & 返回响应

下面进行演示,你会发现,服务器的搭建竟然如此简单:

// 引入node.js内置模块
var http = require("http");

// 创建并监听服务器
http.createServer(function (request, response) {

    // 响应行/响应头
    // 参数1:响应行的信息之一,响应状态吗,200表示成功
    // 参数2:响应头的信息之一,内容类型为纯文本
    response.writeHead(200, {"Content-Type": "text/plain"});

    // 响应体
    response.write("Loli suuuuuuuuuki!!!");
    response.end("Bye~");

}).listen(8888);
>>> 访问地址:http://localhost:8888

 
 

web_85">获取web请求参数

上面说过,web服务端开发无非就是获取请求参数、设置响应内容(不考虑视图跳转的话)。一切在node.js中都是这么简单:

javascript">// 引入node.js内置模块
var http = require("http");
var url = require("url");

// 创建并监听服务器
http.createServer(function (request, response) {

    // 响应行/响应头
    // 参数1:响应行的信息之一,响应状态吗,200表示成功
    // 参数2:响应头的信息之一,内容类型为纯文本
    response.writeHead(200, {"Content-Type": "text/plain"});

    // 解析请求url
    var params = url.parse(request.url, true).query;

    // 设置响应
    for (var k in params) {
        response.write(k + " : " + params[k]);
        response.write("\n");
    }

    response.end("");

}).listen(8888);
>>> 访问地址:http://localhost:8888/?name=Alice&age=12

 
 

从客户端发出请求

回想我们对Java后台开发,似乎一直是关注服务端的编写。至于客户端?那不是前端人员的工作吗?至于请求,那不是在前端写个url访问后台资源不就行了吗?

node.js可以让你开开眼界。

node.js的特点是异步I/O、事件驱动、回调函数。所以,在客户端的请求不仅仅是设置一个url这么简单,还可以设置收到响应后的回调。下面还是看演示:

javascript">// 引入node.js内置模块
var http = require("http");

// 组成请求URL
var option = {
    host: "localhost",
    port: "8888",
    path: "/index.html"
}

// 响应后的回调
var callback = function (response) {
    var body = "";
    // 不断把响应数据加到一起
    response.on("data", function (data) {
        body += data;
    });
    // end是响应结束的标志
    response.on("end", function () {
        console.log(body);
    });
}

// 客户端向服务端发出请求
var req = http.request(option, callback);
req.end();

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

JS Saikou!!!


http://www.niftyadmin.cn/n/1329986.html

相关文章

异常、线程

1.1 异常概念异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是:* **异常** :指的是程序在执行过程中,出现的非正常的情况,最终会导…

线程与同步

。 代码如下: 自定义线程类: public class MyThread extends Thread{ /** 利用继承中的特点 * 将线程名称传递 进行设置 */ public MyThread(String name){ super(name); }/** 重写run方法 * 定义线程要执行的代码 */ public void run(){ for (int i 0;…

【Node.js】无比强大的包管理工具——npm的使用

什么是NPM Node Package Manger,直译为node包资源管理器。 它的使用场景有: 允许用户从NPM服务器下载的第三方包到本地使用(通过package.json配置文件引入依赖)。允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用…

线程池、Lambda表达式

第一章 等待唤醒机制## 1.1 线程间通信**概念:**多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源&#xf…

【Node.js】三个Demo学会webpack打包

webpack用来做什么? 简单的说,可以将多个js、css…文件打包成一个js文件,引用了这个js文件就相当于引用了所有的被打包的文件。 webpack安装 首先,保证你已经安装好node.js,检查一下: node -v安装webpac…

File类、递归

1.1 概述java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。## 1.2 构造方法* public File(String pathname) :通过将给定的**路径名字符串**转换为抽象路径名来创建新的 File实例。 * public File(String p…

【经典专题】多出的一维k遍历——升阶版的区间DP

区间DP简介 区间DP区别于普通DP的特征是:dp[i][j]表示的是从i到j的闭区间 。 比较典型的区间DP有:字符串匹配问题、回文子串问题。 今天要说的区间DP,会更进一步,使用更高维的 dp[i][j][k] 。但是,本质仍旧是区间DP…

【蓝桥杯】Java开发A组省赛真题+详细解析

1. 世纪末的星期 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 还有人称今后的某个世纪末的12月31日,如果是星期一则会… 有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 于是,“谣言制造商”又修改为星…