【Node.js-1】NodeJS简单入门、http、fs、url、querystring、接收客户端get/post数据

本文介绍如何使用Node.js创建一个简单的Web服务器,并通过几个实例演示如何处理HTTP请求、读写文件、解析URL参数以及接收POST数据。

1、使用Sublime Text,最好安装一下Node这个package,安装之后不仅有代码提示这些,而且可以直接右击run,不再需要到cmd里面node xxx去执行。当然,里面的代码基本就是JS的代码。
这里写图片描述

2、先写个简单入门程序吧,在server.js文件中。

——这个代码就是简单创建一个服务器,然后挂起监听。其中判断请求里面的路径,根据请求输出不同的内容。实际开发肯定不是这么写,这边只是一个简单的例子。我们测试的时候,在浏览器中输入localhost:1337/index之类的就可以了。这里用到了我们接触的第一个模块,叫http

const http = require('http');

var server = http.createServer(function(req, res){
    switch(req.url){
        case '/index':
            res.write("This is index page.");
            break;
        case '/about':
            res.write("This is about page.");
            break;
        default:
            res.write("This is 404 page.");
            break;
    }
    res.end();
});

server.listen(1337)

3、继续补充案例。加上了读写文件。读写文件都有一个回掉函数作为参数。用到的就是文件系统模块,叫fs

——目录结构如下:
这里写图片描述

const http = require('http');
const fs = require('fs');

var server = http.createServer(function(req, res){
    var file_path = './www' + req.url;
    fs.readFile(file_path, function(err, data){
        if(err){
            res.write('404');
        }else{
            res.write(data);
        }
        // 读写文件是异步的,但读写不能再end之后,所以需要把end放在这里,保证前后执行顺序
        res.end();
    });
});

server.listen(1337)

4、接着测试从客户端接收数据的例子。我们用一个form表单,先测试用get方法。

——这是我们的目录结构。
这里写图片描述

index.html里面如截图,不展示代码了。server.js代码如下:

——核心逻辑是判断请求路径,如果是/index.html的话,就加载那个页面,如果不是的话(比如form表单的action的地址),就去处理。我们这里判断比较简单,简化了一下。

——其次,这里面是通过req.url后,然后对这个url进行各种切割,各种提取,最终把里面的参数成功放在一个叫做r的字典里面。

const http = require('http');
const fs = require('fs');

var server = http.createServer(function(req, res){
    var file_path = './www' + req.url;
    if (req.url == '/index.html') {
        // 加载页面
        fs.readFile(file_path, function(err, data){
            if (err) {

            }else{
                res.write(data);
            }
            res.end();
        });
    }else{
        // 处理结果
        r = {}
        if (req.url.indexOf('?')!=-1) {
            // /result?username=aaa&pwd=aaa
            var urlParams = req.url.split('?')[1];
            var kvs = urlParams.split('&');
            for (var i = 0; i < kvs.length; i++) {
                var temp = kvs[i].split('=');
                r[temp[0]] = temp[1];
            }
            res.write(r['username']+':'+r['pwd']);  // aaa:aaa
            console.log(r);                         // { username: 'aaa', pwd: 'aaa' }
        }
        res.end();
    }
});

server.listen(1337)

5、当然,我们会有更简单的方法,就是使用querystring模块,它的parse函数可以解析中间带有&的字符串,自动分割成一个字典。

const querystring = require('querystring');

// 处理结果
r = {};
if (req.url.indexOf('?')!=-1) {
    // /result?username=aaa&pwd=aaa
    var urlParams = req.url.split('?')[1];
    r = querystring.parse(urlParams);
    res.write(r['username']+':'+r['pwd']);  // aaa:aaa
    console.log(r);                         // { username: 'aaa', pwd: 'aaa' }
}
res.end();

6、当然,还有更简单的方法,使用url模块,它的parse方法可以解析整个url,解析之后,想要什么自己取即可。

const urlLib = require('url');

// 处理结果
r = {};
var o = urlLib.parse(req.url,true);
res.write(o.pathname+'\n'+o.query['username']+':'+o.query['pwd']);
console.log(o);
res.end();

我们可以看到,这个时候,被解析出来的o是下面这样子的。需要注意的是上面的方法后面还加了一个true参数,那么如果不加呢?不加的话,下面的query对应的值就不是字典的样子,而是用&连接起来的一个字符串,就是最原始的那个。

Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '?username=aaa&pwd=aaa',
  query: { username: 'aaa', pwd: 'aaa' },
  pathname: '/result',
  path: '/result?username=aaa&pwd=aaa',
  href: '/result?username=aaa&pwd=aaa' }

7、其实上面,我们在表单里面用了get,一般不会这样。正常情况是用post,现在我们就来看看怎么使用和接收数据。

——同样的,文件结构不变,html页面里面只不过把get变成了post而已。

——看到对于post过来的数据,因为考虑到可能有多次,所以不能直接获取,而是通过监听dataend两个事件来获取数据,基于reqdata事件,意思就是这个请求只要传数据就触发,可能会触发多次。基于reqend方法就是请求结束后触发,就触发一次。

        // 处理结果
        var str = '';
        // 数据量大的时候可能会执行很多次
        req.on('data',function(data){
            // 结果类似xxx=xxx&&yyy=yyy
            str += data;
            console.log(str);
        });
        req.on('end',function(){
            // 解析输出
            var r = querystring.parse(str);
            console.log(r);
        });
        res.end();

注意:

如果请求是get的话,用get和post两个方法都能获取到数据;但是当请求方式是post的时候,get的那个方法就获取不到数据了。

<think>首先,用户查询的是:"我想查找在nodejs.org上安装必要软件Node.js的方法 请问在nodejs.org上安装Node.js的方法"。所以,我需要提供从官方网站nodejs.org安装Node.js的方法。 根据系统级指令: - 所有行内数学表达式必须使用$...$格式,但在这个上下文中,似乎没有数学表达式,所以可能不需要。 - 独立公式使用$$...$$格式,但同样,这里可能没有。 - LaTeX语法正确:确保在需要时正确使用LaTeX。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户提供的引用是: - [^1]: 关于Node.js安装失败的问题,建议使用国内镜像。 - [^2]: 提到通过阿里云开源镜像站安装。 - [^3]: 使用NVM安装Node.js时的错误和解决方案,涉及设置镜像。 - [^4]: Node.js的安装教程,涉及npm配置。 用户明确说:"上述引用仅供参考,并不是用户真正的需求",所以我不能直接依赖于这些引用。用户的需求是针对在nodejs.org上安装Node.js的方法。 用户上一次的问题是:"参考站内引用:...",但当前查询是新的:"我想查找在nodejs.org上安装必要软件Node.js的方法"。所以,我需要专注于这个新查询。 关键点:用户想直接从nodejs.org安装,而不是使用镜像或其他方法。引用中提到了一些问题如网络连接失败,所以我应该包括从官方网站安装的基本步骤,并可能提到如果遇到问题如何处理。 标准步骤从nodejs.org安装Node.js1. 访问官方网站:https://nodejs.org 2. 下载安装包:通常有LTS(长期支持)版本和当前版本。推荐下载LTS版本。 3. 运行安装程序:双击下载的安装文件,按照向导安装。 4. 验证安装:打开命令行,输入 `node -v` 和 `npm -v` 检查版本。 由于引用中提到网络问题,我应该建议如果直接访问困难,可以使用国内镜像,但用户指定了"在nodejs.org上",所以我需要优先描述官方方法。 参考用户提供的引用: - [^1] 提到网络问题和使用淘宝镜像。 - [^2] 提到通过阿里云镜像安装。 - [^3] 详细说明使用NVM安装和设置镜像。 - [^4] 涉及npm配置目录。 但用户说这些不是真正的需求,所以我不能直接引用。不过,我可以整合信息,提供完整的指南。 结构清晰的回答: - 介绍安装方法。 - 步骤式指南。 - 在末尾生成相关问题。 回答结构: 1. **介绍**:简要解释如何在nodejs.org安装Node.js。 2. **详细步骤**: - 步骤1: 访问nodejs.org。 - 步骤2: 下载安装包。 - 步骤3: 运行安装程序。 - 步骤4: 验证安装。 3. **处理常见问题**:如果遇到网络问题,建议使用国内镜像。 4. **生成相关问题**:在末尾添加相关问题。 引用标识:由于引用是用户提供的,但用户说不是真正的需求,我应该谨慎使用。系统指令说"回答中引用的段落末尾自然地添加引用标识",但这里的引用是用户提供的参考,不是我的回答引用。或许在提到具体方法时引用,但用户说"上述引用仅供参考",所以我可能不需要引用它们。如果我在回答中提到镜像方案,可以引用[^3]或[^1],但优先描述官方方法。 最终回答: - 使用中文。 - 清晰、逐步。 - 结束时生成相关问题。 相关问题基于主题:例如,安装失败怎么办、使用NVM安装、配置npm等。 </think>### 在 nodejs.org 上安装 Node.js 的方法 如果您希望直接从 Node.js 官方网站(nodejs.org)安装 Node.js,以下是详细的步骤式指南。官方安装方法简单可靠,适用于大多数操作系统(Windows、macOS、Linux)。如果遇到网络连接问题(常见于国内用户),我会在最后补充解决方案。整个过程通常只需几分钟。 #### 安装步骤 1. **访问官方网站**: 打开浏览器,访问 [Node.js 官网](https://nodejs.org)。官网会自动检测您的操作系统,并提供对应版本的下载选项。 - 推荐下载 **LTS 版本**(Long-Term Support),因为它更稳定且提供长期更新。 - 如果需要特定版本(如 v20.0.0),可点击 “Other Downloads” 选择。 2. **下载安装包**: 点击 “Download” 按钮下载安装程序: - Windows 用户:下载 `.msi` 或 `.exe` 文件。 - macOS 用户:下载 `.pkg` 文件。 - Linux 用户:下载二进制包或使用包管理器(如 apt)。 3. **运行安装程序**: 双击下载的安装文件,按照向导完成安装: - **Windows/macOS**:同意许可协议,选择安装路径(默认路径即可),点击 “Next” 或 “Install”。安装程序会自动添加 Node.js 和 npm 到系统路径。 - **Linux**:解压二进制包,或执行命令(如 `sudo apt install nodejs npm`)。 - 安装完成后,不需要额外配置即可使用。 4. **验证安装**: 打开命令提示符(Windows)或终端(macOS/Linux),运行以下命令检查是否安装成功: ```shell node -v # 输出 Node.js 版本号,例如 v20.0.0 npm -v # 输出 npm 版本号,例如 v10.0.0 ``` 如果输出版本信息,表示安装成功![^4] #### 处理常见问题 - **网络连接失败解决**:如果您访问 nodejs.org 时出现类似 “Error: unable to connect to https://nodejs.org” 的错误(常见于国内网络),可以通过设置国内镜像源加速下载: - 使用淘宝 Node.js 镜像站(https://npmmirror.com/mirrors/node/),直接下载安装包。 - 或者使用 NVM(Node Version Manager)安装时添加镜像源: ```shell nvm node_mirror https://npmmirror.com/mirrors/node/ nvm install 20.0.0 # 从镜像安装指定版本 ``` 这种方法能绕过官方服务器网络阻塞[^1][^3]。 - **npm 配置优化**:安装后,您可能需要设置 npm 全局包目录(可选): ```shell npm config set prefix "您的目录路径" # 替换为实际目录,例如 E:\nodejs\node_global[^4] ``` #### 总结 在 nodejs.org 官网安装 Node.js 是最直接的方法,适合大多数用户。如果网络问题导致下载失败,建议切换到国内镜像源。安装完成后,您即可开始开发 Node.js 应用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值