node基础,快速入门node.js(1)

447 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

一、Node.js基础

1、认识Node.js

特性

  • Nodejs语法完全是js语法,只要你懂js基础就可以学会Nodejs后端开发
  • NodeJs超强的高并发能力,实现高性能服务器
  • 开发周期短、开发成本低、学习成本低

使用nodejs需要了解多少JavaScript

nodejs.cn/learn/how-m…

浏览器环境 vs node环境

  • 浏览器和 Node.js 都使用 JavaScript 作为其编程语言。
  • 在浏览器中,您所做的大部分时间都是与 DOM 或其他 Web 平台 API(如 Cookies)进行交互。 这些当然在 Node.js 中不存在,没有浏览器提供的 documentwindow 和所有其他对象。
  • 在浏览器中,不能使用Node.js 通过其模块提供的所有友好的 API,比如文件系统访问功能。
  • Node.js 使用 CommonJS 模块系统,浏览器使用 ES Modules 标准。
  • Node.js 中使用 require()引入模块,在浏览器中使用 import

2、搭建开发环境

下载

nodejs.cn/download/

image-20220730225534946.png

建议下载你所访问时的长期支持版本,安装很简单,一直下一步即可,注意安装路径不要有中文。

配置环境变量,在cmd中输入 node -v 出现版本号即为安装成功。

安装nvm

主要用来管理NodeJS版本,可以方便的切换不同的NodeJS版本。

使用管理员身份打开cmd,执行 npm install nvm -g 等待下载安装,再次输入 nvm -v 出现版本号即为安装成功,

常用命令描述
nvm v或version查看当前的nvm版本
nvm list列出所有安装的版本
nvm list available列出所有远程服务器的版本
npm install 具体版本号安装指定版本的node
nvm uninstall 具体版本号卸载指定版本的node
nvm use 具体版本号切换使用指定的版本
nvm current显示当前使用的版本

npm简介

npm init
npm install 包名 –g  (uninstall,update)
npm install 包名 --save-dev (uninstall,update)
npm list -g (不加-g,列举当前目录下的安装包)
npm info 包名(详细信息) npm info 包名 version(获取最新版本)
npm install md5@1(安装指定版本)
npm outdated(  检查包是否已经过时)
​
"dependencies": {    "md5": "^2.1.0"  }  ^ 表示 如果 直接npm install 将会 安md5
2.*.*   最新版本
​
"dependencies": {    "md5": "~2.1.0"  }  ~ 表示 如果 直接npm install 将会 安装md5 2.1.*  最新版本
​
"dependencies": {    "md5": "*"  }  * 表示 如果 直接npm install 将会 安装 md5  最新版本

安装 nrm

NRM (npm registry manager)是npm的镜像源管理工具,有时候国外资源太慢,使用这个就可以快速地在 npm 源间切换。

手动切换方法: npm config set registry https://registry.npm.taobao.org

  • 安装 nrm:npm install -g nrm,全局安装nrm。
  • 使用 nrm:执行命令 nrm ls 查看可选的源。 其中,带*的是当前使用的源,上面的输出表明当前源是官方源。
  • 切换 nrm:如果要切换到taobao源,执行命令nrm use taobao
  • 测试速度:你还可以通过 nrm test 测试相应源的响应时间。

二、内置模块

http模块

http模块的作用是提供Http服务。

新建app.js,创建一个HTTP服务:

//导入http模块
const http = require('http');
​
//createServer()创建web服务实例
const server = http.createServer();
​
/** 
 * @description: 监听请求事件
 * @param {*} request 请求事件
 * @param {*} req 请求对象
 * @param {*} res 响应对象
 * @return {*} 返回给前端的数据
 */
server.on('request', (req, res) => {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({
        data: 'Hello World!'
    }));
});
​
/** 
 * @description: 启动服务器
 * @return {*} 
 */
server.listen(3000);

在终端启动 node app.js

此时在浏览器访问 http://localhost:3000 就能看到后端返回的数据

req请求对象

req对象是前端发起请求时的对象

属性描述
req.url请求资源路径及参数
req.method请求方式
req.headers请求头信息

res响应对象

res是后端响应后的对象

属性描述
res.end(数据)返回给前端的数据
res.writeHead(200, { 'Content-Type': 'application/json' });响应头信息,状态码和返回数据类型

根据不同请求地址返回不同的信息

新建app.js:

const http = require('http');
//导入module.js文件中导出的方法
const module = require('./modules/module.js');
​
//创建本地服务器来接收数据
const server = http.createServer((req, res) => {
    
    //如果请求地址是'/favicon.ico',直接返回
    if(req.url === '/favicon.ico') {
        return;
    }
​
    res.writeHead(module.readerStatus(req.url), { "Content-Type": "text/html;charset=utf-8" });
    res.write(module.readerHTML(req.url));
​
    res.end();
}).listen(3000, ()=>{
    console.log("http://localhost:3000");
});

新建modules目录,新建module.js

/** 
 * @description: 根据请求地址返回状态码
 * @param {*} url 请求地址
 * @return {*} 状态码
 */
function readerStatus(url){
    let arr = ["/","/home","/list"];
    return arr.includes(url) ? 200 : 404;
}
​
/** 
 * @description: 根据请求地址返回页面信息
 * @param {*} url 请求地址
 * @return {*} 页面信息
 */
function readerHTML(url) {
    switch(url){
        case "/home":
        case "/":
            return `
            <html>
                <div>这是home页面</div>
            </html>
        `;
        case "/list":
            return `
            <html>
                <div>这是list页面</div>
            </html>
        `;
        default: 
        return `
            <html>
                <div>404 not found</div>
            </html>
        `
    }
}
//导出方法
module.exports = {
    readerHTML,
    readerStatus
}

启动服务 node app.js

打开浏览器输入对应url地址就会返回不同页面信息

但是这时会发现一个问题,在地址栏输入http://localhost:3000/list?name=aa&age=20

前端带参数请求 list 时返回给我的却是404,要解决这个问题就要用到 url 模块。