Node基础入门

一、什么是Node?

Node是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它让 JavaScript 可以脱离浏览器 Node.js(简称 Node)也能正常运行,它打破了传统上 JavaScript 只能在浏览器中运行的限制,让 JavaScript 可以用于服务器端编程。应用场景有:

  • 构建高性能的 API 服务和后端服务器
  • 开发实时通信应用(如聊天工具、在线协作工具)
  • 处理大量 I/O 操作的场景(如日志处理、数据流式处理)
  • 构建命令行工具(如前端工程化工具 Webpack、Vue CLI 等)
  • 开发游戏服务器、物联网(IoT)应用等

二、安装Node

安装Node可前往它的官网自行下载:nodejs.org/en/

以下测试代码都执行在node环境中,在控制台输入node 文件名.js即可。为了不用每次改动都执行一次node命令,可执行npm i -g nodemonnodemon在node的基础上增加了自动重启服务的功能,实时监听文件的改动并执行,在终端中执行nodemon 文件名.js即可。

三、Node内置模块

1. http模块
(1)创建一个简单的服务器

创建一个js文件http模块-01.js,写入以下代码:

js 复制代码
// 内置模块http,直接引入
const http = require('http')

// 使用createServer创建本地服务器
const server = http.createServer((req, res) => {
    // 回调函数,接收浏览器传的参数,返回渲染的内容
    res.write('Hello JavaScript')
    // 结束响应要调用end(),否则浏览器得不到响应
    res.end()
})

// 设置监听端口号
server.listen(8888, () => {
    console.log('server 启动')
})

控制台执行node .\http模块-01.js,在浏览器中输入localhost:8888进行访问,查看浏览器返回:

可见,浏览器能正确渲染服务器返回的内容。

也可以设置服务器返回html文本,但是要在头部设置浏览器解析的格式和编码

js 复制代码
// 内置模块http,直接引入
const http = require('http')

// 使用createServer创建本地服务器
const server = http.createServer((req, res) => {
    // 设置浏览器要用什么格式解析服务器返回的内容,如果不设置,返回的只是html字符串
    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})
    res.write(`
        <h2>你好 JavaScript</h2>
    `)
    // res.end()方法也可以追加返回内容
    res.end('[1,2,3]')
})

// 设置监听端口号
server.listen(8888, () => {
    console.log('server 启动')
})

浏览器查看效果:

(2)响应浏览器的请求

首先可以打印一下,req有什么信息

js 复制代码
const http = require('http')

const server = http.createServer((req, res) => {
    console.log(req)
    res.write('123')
    res.end()
})

server.listen(8888, () => {
    console.log('server 启动')
})

在控制台用node执行,查看输出,可见req是一个包含了众多内容的参数:

当我们在浏览器输入地址后,可以通过url查看具体请求的地址,比如输入http://localhost:8888/home

js 复制代码
const http = require('http')

const server = http.createServer((req, res) => {
    // 过滤掉浏览器默认请求的偏爱图标
    if (req.url === '/favicon.ico') {
        return
    }
    console.log(req.url)
    res.write('123')
    res.end()
})

server.listen(8888, () => {
    console.log('server 启动')
})

,查看控制台打印:

通过获取的url可以针对性返回内容,比如输入的是请求具体页面的地址,我们就返回带html的内容,如果是请求具体接口的地址,我们就返回数据。 首先,创建js文件url_module,模拟请求地址:

js 复制代码
const urlList = ['/index', '/list', '/api/a']

function statusResult(url) {
    return urlList.includes(url) ? 200 : 404
}

function responseResult(url) {
    switch(url) {
        case '/index':
            return `<h2>index页面</h2>`
        case 'list':
            return `<h2>list页面</h2>`
        case '/api/a':
            return JSON.stringify({
                data: 'aaaa'
            })
        default:
            return '404 资源不存在'
    }
}

module.exports = {
    statusResult,
    responseResult
}

再处理响应的文件中引入:

js 复制代码
const http = require('http')

const urlModule = require('./url_module')

const server = http.createServer((req, res) => {
    
    // 过滤掉浏览器默认请求的偏爱图标
    if (req.url === '/favicon.ico') {
        return
    }

    res.writeHead(urlModule.statusResult(req.url), {'Content-Type': 'text/html;charset=utf-8'})
    res.write(urlModule.responseResult(req.url))
    res.end()
})

server.listen(8888, () => {
    console.log('server 启动')
})

浏览器看一下效果

2.url模块

url模块能解析处理请求传参,在下面代码中,用url.parse()方法来解析url,在浏览器中输入http://localhost:8888/api/a?username=lucy,可以打印一下解析的结果是什么:

js 复制代码
const http = require('http')
const url = require('url')
const urlModule = require('./url_module')

const server = http.createServer((req, res) => {
    // 过滤掉浏览器默认请求的偏爱图标
    if (req.url === '/favicon.ico') {
        return
    }

    console.log('url...', req.url)
    console.log(url.parse(req.url))

    // res.writeHead(urlModule.statusResult(req.url), {'Content-Type': 'text/html;charset=utf-8'})
    // res.write(urlModule.responseResult(req.url))
    res.end()
})

server.listen(8888, () => {
    console.log('server 启动...')
})

打印结果如下,其中pathname是请求路径,query是传参:

但是此时query是字符串,还是不方便我们解析,在parse()中新增传参,即可获得对象形式的query:

url模块不仅能解析url形式的字符串,也能将url格式的对象转为字符串:

js 复制代码
const url = require('url')

console.log(url.format({
    protocol: 'https',
    host: 'taobao.com',
    hostname: 'taobao.com',
    query: {name: 'lucy', age: 14},
}))
// 输出:https://taobao.com?name=lucy&age=14

url模块还有resolve方法,用于路径的拼接:

js 复制代码
const url = require('url')
如果前面字符串后面不带/,后面的字符串会替换前面字符串最后一个/后面的内容
console.log(url.resolve('https://aaa/bbb', 'ccc')) // 输出https://aaa/ccc
console.log(url.resolve('https://aaa/bbb/', 'ccc')) // 输出https://aaa/bbb/ccc

// 如果后面字符串带/,则会直接替换掉前面字符串整个路径名
console.log(url.resolve('https://aaa.com/bbb/', '/ccc'))// 输出https://aaa.com/ccc

先了解到这里,后续还有再继续补充

相关推荐
山河木马2 小时前
Emscripten 从 C/C++ 调用 JavaScript
前端·javascript·c++
味悲2 小时前
CVE-2025-55182 (React2Shell) 漏洞分析与复现
安全·node.js
scan7243 小时前
pydantic格式输出
服务器·前端·javascript
ZC跨境爬虫3 小时前
跟着MDN学HTML_day44:(ProcessingInstruction接口)
前端·javascript·ui·html·媒体
ZC跨境爬虫4 小时前
跟着MDN学HTML_day_45:(EventTarget接口)
前端·javascript·ui·html·媒体
漂移的电子4 小时前
【el-tree】外层多选,某个属性内层单选
前端·javascript·vue.js
卷帘依旧6 小时前
JavaScript 中的 Symbol
前端·javascript
JYeontu6 小时前
正方体翻滚Loading 2.0
前端·javascript·css
Czzzzlq6 小时前
【无标题】
typescript·node.js·ai编程