Nodes之Get和Post请求

在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交。
表单提交到服务器一般都使用GET/POST请求。
本章节我们将为大家介绍 Node.js GET/POST请求。
获取GET请求内容
由于GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET请求的参数。
node.js中url模块中的parse函数提供了这个功能。

var http = require('http');
var url = require('url');
var util = require('util');

http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain'});
    //pares函数解析初键值对,inspect函数返回json格式数据
    res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);

在浏览器中访问http://localhost:3000/user?name=w3c&email=w3c@w3cschool.cc 然后查看返回结果。
w3cnodejs
获取POST请求内容
POST请求的内容全部的都在请求体中,http.ServerRequest并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。
比如上传文件,而很多时候我们可能并不需要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,所有node.js默认是不会解析请求体的, 当你需要的时候,需要手动来做。

var http = require('http');
var querystring = require('querystring');
var util = require('util');

http.createServer(function(req, res){
    var post = '';     //定义了一个post变量,用于暂存请求体的信息

    req.on('data', function(chunk){    //通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
        post += chunk;
    });

    req.on('end', function(){    
        //在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
        //如果post = format=ddd&partner=ffff&uuid=sss
        post = querystring.parse(post);
        //客户端会收到json格式的数据
        res.end(util.inspect(post));
    });
}).listen(3000);
要在 NestJS 中使用 nodes7 连接和读写,你可以按照以下步骤操作: 1. 首先,使用 npm 安装 nodes7 模块: ``` npm install nodes7 ``` 2. 在你的 NestJS 应用程序中,创建一个 S7Service 类,其中包含以下代码: ```typescript import { Injectable } from '@nestjs/common'; import { S7Client } from 'nodes7'; @Injectable() export class S7Service { private client: S7Client; constructor() { this.client = new S7Client(); } async connect(ip: string, rack: number, slot: number) { return new Promise((resolve, reject) => { this.client.ConnectTo(ip, rack, slot, (err) => { if (err) { reject(err); } else { resolve(); } }); }); } async read(db: number, start: number, length: number) { return new Promise((resolve, reject) => { this.client.ReadArea('DB', db, start, length, 0x02, (err, res) => { if (err) { reject(err); } else { resolve(res); } }); }); } async write(db: number, start: number, data: Buffer) { return new Promise((resolve, reject) => { this.client.WriteArea('DB', db, start, data.length, 0x02, data, (err) => { if (err) { reject(err); } else { resolve(); } }); }); } } ``` 在这个类中,我们使用 `nodes7` 模块中的 `S7Client` 类来建立连接,并提供了 `connect`、`read` 和 `write` 方法来进行读写操作。 3. 在你的控制器中,注入 `S7Service` 类,并使用它来进行读写操作。例如: ```typescript import { Controller, Get, Post, Body } from '@nestjs/common'; import { S7Service } from './s7.service'; @Controller('s7') export class S7Controller { constructor(private s7Service: S7Service) {} @Get('/connect') async connect() { await this.s7Service.connect('192.168.0.1', 0, 2); return 'Connected'; } @Get('/read') async read() { const data = await this.s7Service.read(1, 0, 10); return { data: Array.from(data), }; } @Post('/write') async write(@Body() body: { data: number[] }) { const buffer = Buffer.from(body.data); await this.s7Service.write(1, 0, buffer); return 'Written'; } } ``` 在这个例子中,我们使用 GET 和 POST 请求来调用 `connect`、`read` 和 `write` 方法,并返回结果。 注意,这只是一个简单的例子,实际上你可能需要处理连接错误、读写错误等情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值