首页 > web前端 > js教程 > 使用node.js学习服务器端JavaScript

使用node.js学习服务器端JavaScript

Lisa Kudrow
发布: 2025-03-13 10:35:10
原创
434 人浏览过

Node.js:构建高性能实时Web应用的现代框架

Node.js是现代Web开发中一个重要的框架,它简化了高性能、实时Web应用程序的创建过程。Node.js允许JavaScript在服务器端和客户端端到端使用。本教程将引导您完成Node.js的安装,并演示如何编写第一个“Hello World”程序。最终,您将学习如何使用Node.js和Express构建一个天气API。

Node.js是什么?

传统上,JavaScript只能在Web浏览器中运行,但由于人们对将其引入服务器端的兴趣日益浓厚,Node.js应运而生。

Node.js与其他服务器技术略有不同,因为它基于事件而非基于线程。用于服务PHP和其他CGI脚本的Apache等Web服务器是基于线程的,因为它们为每个传入请求生成一个系统线程。虽然这对于许多应用程序来说足够了,但基于线程的模型在处理许多长期连接(例如,服务实时应用程序(如即时消息应用程序)所需的连接)时扩展性不佳。

“Node.js中的每个I/O操作都是异步的……”

Node.js使用事件循环而不是线程,能够扩展到数百万个并发连接。它利用了服务器大部分时间都在等待I/O操作(例如,从硬盘读取文件、访问外部Web服务或等待文件上传完成)这一事实,因为这些操作比内存操作慢得多。Node.js中的每个I/O操作都是异步的,这意味着服务器可以在I/O操作进行时继续处理传入请求。JavaScript非常适合基于事件的编程,因为它具有匿名函数和闭包,这使得定义内联回调变得轻而易举,而且JavaScript开发人员已经知道如何以这种方式进行编程。这种基于事件的模型使Node.js非常快速,并且使实时应用程序的扩展非常容易。

  1. 安装

Node.js官方支持Linux、macOS、Microsoft Windows、SmartOS和FreeBSD。要在Windows(v16及更高版本)上安装最新版本的Node.js,您的计算机必须运行Windows 8.1、10或11。

Node.js内置了自己的包管理器,称为节点包管理器(简称npm),它允许您从npm注册表安装第三方模块。

  1. 从nodejs.org下载最新版本的Node.js(撰写本文时最新版本为17.9.0,最新LTS版本为16.14.2)。这应该会在您的计算机上下载.msi文件。
  2. 运行该文件并完成安装向导。大多数选项都是可选的——除非您有充分的理由,否则无需更改程序路径。您可以选择安装Chocolatey(一个Windows包管理器)或跳过此步骤。
  3. 安装向导完成后并且Node.js成功安装后,打开终端并运行npm -v以查看npm版本。

此外,如果您在程序中搜索Node,您应该会找到Node.js命令提示符。

Learning Server-Side JavaScript With Node.js Learning Server-Side JavaScript With Node.js Learning Server-Side JavaScript With Node.js Learning Server-Side JavaScript With Node.js 命令提示符提供了一个REPL(读取-评估-打印循环),您可以在其中键入JavaScript Node.js代码,并立即评估代码并输出结果。您还可以将JavaScript从外部文件加载到REPL会话中等等。

  1. Hello World!

学习任何新技术都始于“Hello World!”教程,因此我们将创建一个简单的HTTP服务器来提供该消息。

首先,我们将创建一个新的Node.js项目。为此,请打开您的终端,切换到您希望项目所在的目录,然后运行以下命令:

npm init
登录后复制

系统会提示您提供有关库的一些信息,包括库名称、作者、入口文件、许可证和版本,完成后,将使用提供的信息创建一个package.json文件。要跳过此步骤,请附加require函数,如下所示(在test.js内部):

var util = require("util");
登录后复制

这将加载util模块,该模块包含用于处理系统级任务(例如将输出打印到终端)的实用程序函数。要在模块中使用函数,请在存储模块的变量上调用它——在本例中,使用文件名作为参数的node命令。

node test.js
登录后复制

运行此命令将在命令行输出“Hello World!”。

要创建HTTP服务器,您必须使用http模块。

var util = require("util");
var http = require("http");

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('Hello World!');
  res.end();
}).listen(8080);

util.log("Server running at https://localhost:8080/");
登录后复制

此脚本导入http模块并创建一个HTTP服务器。传递给http.createServer()的匿名函数会在接收到请求时执行。在浏览器中访问http://localhost:8080/,您将看到Hello World!

Learning Server-Side JavaScript With Node.js 3. 一个简单的静态文件服务器

好的,我们已经构建了一个HTTP服务器,但是无论您访问哪个URL,它除了“Hello World”之外什么也不会发送。任何HTTP服务器都必须能够发送静态文件,例如HTML文件、图像和其他文件。以下代码就是这样做的:

var util = require("util"),
    http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs");

http.createServer(function(request, response) {
    var uri = path.parse(request.url).base;
    var filename = path.join(process.cwd(), uri);
    fs.access(filename, fs.constants.F_OK, function(err) {
        if(err) {
            response.writeHead(404, {"Content-Type": "text/plain"});
            response.write("404 Not Found\n");
            response.end();
            return;
        }

        fs.readFile(filename, "binary", function(err, file) {
            if(err) {
                response.writeHead(500, {"Content-Type": "text/plain"});
                response.write(err   "\n");
                response.end();
                return;
            }

            response.writeHead(200);
            response.write(file, "binary");
            response.end();
        });
    });
}).listen(8080);

util.log("Server running at http://localhost:8080/");
登录后复制

我们首先需要在代码中使用所有模块。这包括httppathurl模块,用于解析请求的传入URL并找到被访问文件的路径名。我们使用process.cwd()(或当前工作目录)和请求文件的路径来查找服务器硬盘上的实际文件名。

接下来,我们检查文件是否存在,这是一个异步操作,因此需要回调函数。如果文件不存在,则向用户发送404 Not Found消息,并且函数返回。否则,我们使用fs.readFile()读取文件。如果在浏览器中访问http://localhost:8080/path/to/file,则该文件将显示在您的浏览器中。

Learning Server-Side JavaScript With Node.js 4. 使用Express在Node.js中构建天气API

在我们的静态文件服务器的基础上,我们将构建一个Node.js服务器,该服务器获取并显示给定城市的预期天气状况。首先,在这个示例中,我们将需要两个额外的第三方模块:axios模块和express模块。Express是一个用于在Node.js应用程序中构建RESTful API的Web框架。我们将使用Express模块构建一个单一的API端点,该端点将从每个请求中获取城市,并使用包含该城市预报天气状况的HTML正文进行响应。天气信息将来自外部API——因此我们将使用axios客户端发出API请求。

首先,我们将同时使用以下命令安装expressaxios模块:

npm i express axios
登录后复制

这将从npm注册表安装这两个模块。用以下代码替换app.get()代码:

app.get('/', (req, res) => {
    let city = req.query.city;

    axios.get(`https://api.openweathermap.org/data/2.5/forecast?q=${city}&appid=${apikey}`)
        .then((response) => {
            if(response.status === 200) {
                res.send(`The weather in your city "${city}" is <br>
                ${response.data.list[0].weather[0].description}`)
            }
        })
        .catch((err) => {
            console.log(err);
        })
})
登录后复制

我们首先从query属性中检索查询字符串(city)。

然后,我们使用axios向天气预报API发出GET请求。URL将需要两个变量:我们要获取预报的city和在Open Weather API信息中心提供的唯一API密钥

我们设置了一个res.send()方法。发生错误时,我们只需通过在命令行上运行node test.js并将以下URL键入浏览器中,即可将错误数据记录到控制台:

<code>http://localhost:3000/?city=nairobi</code>
登录后复制

请注意,nairobi可以替换为您选择的任何城市。以下是您应该获得的结果。

Learning Server-Side JavaScript With Node.js 后续步骤

Node.js是一项非常令人兴奋的技术,它简化了高性能实时应用程序的创建过程。我希望您能够看到它的好处,并能够在您自己的某些应用程序中使用它。由于Node.js具有强大的模块系统,因此很容易在您的应用程序中使用开源第三方库,并且几乎所有内容都有可用的模块:包括数据库连接层、模板引擎、邮件客户端,甚至连接所有这些内容的完整框架。

祝您Node.js编程愉快!

此文章已更新,并包含Kingsley Ubah的贡献。Kingsley热衷于创作教育和启发读者的内容。爱好包括阅读、足球和骑自行车。

以上是使用node.js学习服务器端JavaScript的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板