请教一个问题:express或者说原生Nodejs的流程

请教一个问题:express或者说原生Nodejs的流程

下了express有点集成度高了 看的很累

一直不太明白具体流程 只停留在nodejs的小流程上 对狠多还有疑问 具体问下 高手帮我解答下b

先说自己理解 var http=require(‘http’);

http.createServer(function(req,res){ 处理req获取路径pathname,然后出路不同的路由,相应req的一些事件继续处理req来的数据和res事件输出到客户端来, 当然这里能分开模块 比如 router写一个模块 处理写一个模块 })

问题来了:我看了express有好多什么app.get app.post 我思考是不是封装的nodejs 的http get或request函数呀, 如果是那么express是如何区分开get和post delete等呢 是判断req来的header信息吗? 因为express 又是connect等的模块合起来的一个框架 看的实在头疼啊

高手给我一个具体的流程可以吗 可以是nodejs的一个框架实现流程或是对express的一个基本的框架里个模块的简单流程给下


6 回复

当然可以。下面我会简要介绍Express的基本工作流程以及如何处理HTTP请求(包括GET、POST等方法),并提供一些简单的示例代码。

Express 工作流程

Express是一个基于Node.js的web应用框架,它简化了HTTP服务器的创建过程,并提供了强大的中间件系统来处理各种任务。下面是Express应用的基本工作流程:

  1. 引入依赖:首先需要引入express库。
  2. 创建应用实例:通过调用express()函数创建一个应用实例。
  3. 定义路由:使用app.get(), app.post(), app.put(), app.delete()等方法定义不同的路由处理器。
  4. 启动服务器:通过监听指定端口启动HTTP服务器。

示例代码

const express = require('express'); // 引入Express库
const app = express(); // 创建应用实例

// 定义GET路由
app.get('/', (req, res) => {
    res.send('Hello, GET request to the homepage');
});

// 定义POST路由
app.post('/', (req, res) => {
    res.send('Hello, POST request to the homepage');
});

// 监听端口
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

解释

  • 引入依赖require('express')引入Express库。
  • 创建应用实例const app = express();创建一个Express应用实例。
  • 定义路由
    • app.get('/', ...): 定义一个处理GET请求的路由,当用户访问根路径时返回"Hello, GET request to the homepage"。
    • app.post('/', ...): 定义一个处理POST请求的路由,当用户向根路径发送POST请求时返回"Hello, POST request to the homepage"。
  • 启动服务器app.listen(PORT, ...)启动HTTP服务器,监听指定端口(这里是3000)。

如何区分请求类型

在Express中,app.get(), app.post(), app.put(), app.delete()等方法用于根据请求类型(GET、POST、PUT、DELETE等)来分发请求到不同的处理器。这些方法内部会检查请求的HTTP方法(即req.method),并将请求分发到相应的处理器。

例如,当你访问根路径并发送一个GET请求时,Express会调用app.get定义的处理器;而当你发送一个POST请求时,Express会调用app.post定义的处理器。

希望这能帮助你更好地理解Express的工作流程!


这些只有类似express的工作流程 如何写程序 而不是比较内部流程

慎用框架

就是不太想用框架 所以才提高的 亲

Express 和原生 Node.js 在请求处理流程上有一定的相似性,但 Express 提供了一些更高级的功能来简化开发。下面我会分别介绍这两种方式的请求处理流程,并通过一些简单的示例代码帮助你理解。

原生 Node.js

在原生 Node.js 中,你可以使用 http 模块来创建一个 HTTP 服务器,并手动处理各种 HTTP 方法(GET, POST 等)。

示例代码

const http = require('http');

http.createServer((req, res) => {
    if (req.method === 'GET') {
        // 处理 GET 请求
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('This is a GET request');
    } else if (req.method === 'POST') {
        // 处理 POST 请求
        let body = [];
        req.on('data', chunk => {
            body.push(chunk);
        }).on('end', () => {
            body = Buffer.concat(body).toString();
            res.writeHead(200, { 'Content-Type': 'text/plain' });
            res.end(`Received POST data: ${body}`);
        });
    }
}).listen(3000, () => {
    console.log('Server running at http://127.0.0.1:3000/');
});

Express

Express 是基于中间件的框架,它提供了一种更简洁的方式来处理不同类型的 HTTP 请求。

示例代码

const express = require('express');
const app = express();

// 处理 GET 请求
app.get('/', (req, res) => {
    res.send('This is a GET request');
});

// 处理 POST 请求
app.post('/', (req, res) => {
    let body = '';
    req.on('data', chunk => {
        body += chunk.toString(); // 累积数据
    });
    req.on('end', () => {
        res.send(`Received POST data: ${body}`);
    });
});

app.listen(3000, () => {
    console.log('Express server running at http://127.0.0.1:3000/');
});

流程总结

  1. 创建 HTTP 服务器:使用 http.createServer() 创建一个 HTTP 服务器。
  2. 处理请求
    • 在原生 Node.js 中,你需要手动检查 req.method 来区分不同的 HTTP 方法。
    • 在 Express 中,你可以直接使用 app.get(), app.post() 等方法来定义不同类型的请求处理逻辑。
  3. 响应请求:在处理完请求后,使用 res.send()res.end() 方法发送响应数据。

通过这种方式,Express 提供了更高级的抽象,使得你可以更容易地管理和扩展你的应用。希望这些示例和解释能够帮助你更好地理解 Express 和原生 Node.js 的请求处理流程。

回到顶部