1. Nodejs中怎么获取HTML中一个form下的所有POST数据
首先获取http,并创建一个web服务,监听本地端口1337,这个可以修改,任何未被占用的端口都可以用,并坚挺data事件和end事件,整个文件保存为app.js
下面这里贴上测试代码
////////////////app.js///////
var http = require('http');
var server = http.createServer(function(req,res){
if(req.url!=="/favicon.ico"){
req.on('data',function(data){
console.log("服务器接收到的数据:"+decodeURIComponent(data));
});
req.on("end",function(){
console.log('客户端请求数据全部接收完毕');
});
}
res.end();
}).listen(1337,"localhost",function(){
console.log("listened");
});
////////////////index.html///////
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Nodejs的data事件与end事件的回调函数测试用页面</title>
</head>
<body>
<form id= "form1" action = "http://localhost:1337/" method = "post">
姓名:<input type = 'text' name = "name" value ="dragon"><br/>
年龄:<input type = "number" name = "age" value ="25">
<input type = "submit" value =" 提交"/>
</form>
</body>
</html>
2. 如何使用Nodejs进行批量下载
前言
在进行大量数据下载时,Python的性能限制和线程库问题让开发者感到困扰。虽然Python是写爬虫的利器,但其自带的HTTP库是阻塞式的,单线程模型下进程大量时间消耗在等待数据传输,这不适合处理下载大量图片链接的场景。为了解决Python的线程问题和提升性能,Node.js成为一个理想选择。
Node.js基于谷歌的V8引擎,采用事件驱动的单线程异步非阻塞运行模型。在高性能V8引擎支持下,Node.js能够实现高并发的web服务,无需Nginx做代理即可达到高业务并发量。这种模型使得Node.js非常适合处理大量并发下载任务。
准备工作
假设你已经通过爬虫获取了一堆图片链接。Node.js脚本可以通过接收POST HTTP请求、进程间通信、读写文件或数据库等方式获取这些链接。以某大型角色扮演网络游戏官网上提供的壁纸链接为例,我们可以使用Node.js的HTTP请求API来下载这些图片。
下载流程
定义一个函数`startDownloadTask`,该函数遍历链接列表,依次启动下载任务。通过调用Node.js的`http.request` API发起下载,由于该API和Node.js的大多数API一样是异步非阻塞模式,`startDownloadTask`函数在调用后立即返回,不会等待下载完成。
`http.request` API接受一个options对象来指定请求的目标地址,并在完成请求时执行回调函数。在回调函数中,我们可以处理数据流、响应状态码和头部信息,从而实现图片的下载和保存。
实现细节
了解`http.request`的使用方法后,我们可以编写下载过程。`getHttpReqCallback`函数用于创建闭包,将下载路径和序号作为参数传递给回调函数。在回调函数中,我们监听`data`和`end`事件,分别处理接收到的数据和数据接收完毕的情况,确保数据的正确存储。
优化与异常处理
为了提高性能,避免频繁磁盘写操作,我们将接收到的数据缓存到列表中,待数据完整后一次性写入磁盘。这样可以减少磁盘I/O操作,提高效率。
程序异常处理至关重要。在代码中添加日志打印、错误处理逻辑以及重试机制,确保程序的健壮性。例如,设置超时时间、处理请求和响应异常等。
总结与资源
Node.js在处理大量并发下载任务时表现出色,得益于其独特的单线程异步非阻塞运行模型。虽然它在某些方面可能与开发者熟悉的其他语言有所不同,但通过实践可以发现Node.js的强大与有趣之处。本文提供了一个从零开始到实际应用的完整示例,旨在帮助开发者理解Node.js中的一些特殊性和运行机制。
3. nodejs 中express框架中request有哪些属性和方法
最近本人在学习开发NodeJs,使用到express框架,对于网上的学习资料甚少,因此本人会经常在开发中做一些总结。
express获取参数有三种方法:官网介绍如下
Checks route params (req.params), ex: /user/:id
Checks query string params (req.query), ex: ?id=12
Checks urlencoded body params (req.body), ex: id=
1、例如:127.0.0.1:3000/index,这种情况下,我们为了得到index,我们可以通过使用req.params得到,通过这种方法我们就可以很好的处理Node中的路由处理问题,同时利用这点可以非常方便的实现MVC模式;
2、例如:127.0.0.1:3000/index?id=12,这种情况下,这种方式是获取客户端get方式传递过来的值,通过使用req.query.id就可以获得,类似于PHP的get方法;
3、例如:127.0.0.1:300/index,然后post了一个id=2的值,这种方式是获取客户端post过来的数据,可以通过req.body.id获取,类似于PHP的post方法;
下面举例介绍下这三个方法:
如下一个test.html代码
<form action="/index" method="get">
<input type="text" name="login_name"/>
<input type="submit" value="Sign In" />
</form>
在nodeJs中我们要自定义HTTP,因此创建index.js
var app = require('express').createServer();
app.get('/:key', function(req, res){
console.log(req.params.key);//输出index
console.log(req.query.login_name);//输出表单get提交的login_name
res.send('great you are right for get method!');//显示页面文字信息
});
app.post('/:key', function(req, res){
<pre name="code" class="javascript"> console.log(req.params.key);//输出index
console.log(req.body.login_name);//输出表单post提交的login_name
res.send('great you are right for post method!');//显示页面文字信息
});app.listen(3000);
之后运行node index.js就可以看到本效果,当然前提是你要先访问test.html,至于如何通过express访问一个html文件我就不详细描述了,可以参考如下代码:
global.fs=require('fs');
var realpath = VIEW + "test.html";
var file = fs.readFileSync(realpath);
res.end(file);
4. nodejs post请求和gat请求之间的区别
get是从服务器上获取数据,post是向服务器传送数据。
2 get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4 get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5 get安全性非常低,post安全性较高。
6 HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。 比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了
7 在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原 样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;GET方式提交的数据最多只能有1024字节,而POST则没有此限制
5. js如何将base64格式图片保存到服务器
下面一小复段代码给大制家分享Nodejs把接收图片base64格式保存为文件存储到服务器上的方法,具体代码如下所示:
app.post('/upload', function(req, res){
//接收前台POST过来的base64
var imgData = req.body.imgData;
//过滤data:URL
var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
var dataBuffer = new Buffer(base64Data, 'base64');
fs.writeFile("image.png", dataBuffer, function(err) {
if(err){
res.send(err);
}else{
res.send("保存成功!");
}
});
});
6. nodejs内置模块有哪些
一、Express框架
前面的章节已经介绍过了,可以使用npm来安装node.js模块。具体操作请参照以前写的nodejs概论。
Express是一个nodejs的web开源框架,用于快速的搭建web项目。其主要集成了web的http服务器的创建、静态文本管理、服务器URL地址请求处理、get和post请求处理分发、session处理等功能。
使用方法,在cmd中打开你所想创建web项目的路径。然后输入
Express appname
即可创建一个名为appname的web项目。控制台打印结果
在jada文件中是可以使用for循环和if判断语句的,可以让你体会类似JSP的<%%>和php的<php></php>在网页上输出数据的快感。
三、forever模块
nodejs作为http服务器,需要确保服务顺利进行,要注意一下两点:
1.后台服务运行,监控运行日志,以及http运行日志;
2.确保项目的正常安全运行,Node.js的启动命令node,很大程度无法满足运行需求;
Node.js的forever模块在第二点就可以起到很大的作用,同时其拥有监控文件更改、自动重启等功能。
forever模块的使用方法有两种:1.在命令行中使用
forever -l forever.log -o out.log -e err.log app.js
-l forever.log -o out.log -e err.log分别指定了forever的运行日志,脚本流水日志,脚本运行错误日志,启动后将在本文件夹下产生out.log、err.log文件。
2.在编码中require forever模块使用。
四、Socket.IO模块
Socket.IO模块主要功能是将WebSocket协议应用到所有浏览配厅器。主要用于实时的长连接多求情项目中。
例如:在线联网游戏,实时聊天、实时股票查看、二维码扫描登录掘粗等。
安装方法仍然是在cmd在中输入npm install socket.io
如何使用Socket.IO来创建一个项目。
需要分别实现服务端和客户端的逻辑:
先创建一个服务端的node.js脚本index_server.js
var app = require('http').createServer(handler)//创建服务器app
, io = require('socket.io').listen(app)//引用socket.io模块监听app
, fs = require('fs')//引用文件处理模块
app.listen(80);//指定app监听的端口,第二个参数127.0.0.1可省略
function handler (req, res) {
fs.readFile(__dirname + '/index.html', function (err, data) { if (err) {
res.writeHead(500); return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.emit('判卖镇news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
其中,socket.emit()为Socket发送消息的函数,第一个参数表示发送消息的key值,第二个参数为发送消息的内容,也就是发送的数据。
Socket。on()为Socket接收消息的函数,第一个参数为接收消息的可以值,第二个参数为回调函数,其中回调函数携带的参数为接收消息所发送的数据。
接下来web前端如何使用JavaScrit 来连接Socket服务器。
新建一个index_client.html
<script type="text/javascript" src="socket.js"></script>
<script type="text/javascript"> var socket = io.connect('http://localhost');//创建本地sock连接
socket.on('news',function (data) {//Socket接收news消息时执行回调函数 console.log(data);
socket.emit('my other event',{my:'data'});
});</script>
<script type="text/javascript" src="socket.js"></script>加载已经安装好的Socket.io的本地JavaScrit文件。
var socket = io.connect('http://localhost');因为端口为80,所有这里可以不端口号
socket.on('news',function (data){}//客户端接收news消息成功后,发送my other event消息到服务端,发送的消息内容为json对象{my:'data'}
接下来只需要运行服务端的index_server.js文件来启动socket服务
效果:在浏览器输入http://127.0.0.1按F12调出浏览器的控制台console即可看见打印出了一个object对象。
执行完毕后可能会报错:catnot find mole socket.io,说明你的socket.IO没有安装,或已经安装并配置为全局,但你的安装路径并没有配置到在path中,所有无法引用。
你可以选择配置path,或者安装到项目内。这里建议安装到你的项目目录下,而不是简单粗暴的配置为全局。先卸载npm uninstall socket.io 进入指定目录后安装node index_server.js
socket.io详细请参阅 http://cnodejs.org/topic/50a1fcc7637ffa4155b5a264
五、request模块
request模块为开发者提供了一种简单访问HTTP请求的方法。request还支持HTTPS的访问方法。
安装:
npm install requset
request模块基本上覆盖了所有的HTTP请求方式如GET,POST,HEAD,DEL等。但其最基本的两个方法是request.get()和request.post().
get和post的区别
get:
1.使用get向服务器发出和接收的请求会附在url之后。类似:http://www..com?id=1221&name=5555这个url中传递了两个参数,一个为id,一个为name。
2.get请求不能超过1024个字节。
post没有限制,也不会附在url上。
接下来做一个简单的实例
get实例:
首先新建一个服务器app_get.js
var http= require("http");
http.createServer(function(req,res){
res.writeHead(200,{'content-Type':'text/plain'});
res.end('Hello world
'+req.method);
}).listen(1337,"127.0.0.1");
再建一个发送求情的request_get.js文件
var request=require('request');
request.get("http://127.0.0.1:1337",function(error,response,result){
console.log(result);
});
在CMD中运行app_get.js,运行成功后,再打开一个cmd(之前的cmd不要关闭),执行request_get.js文件。
执行后的结果如下
hello world
GET
可以看出,通过request.get方法访问
http://127.0.0.1:1337 返回的结果就是res.end()的参数
post实例:
和上面一样,先新建服务器app_post.js
var http= require("http"),
querystring=require('querystring');
http.createServer(function(req,res){ var postData=""; //开始异步接收客户端post的数据
req.addListener("data",function (postDataChunk) {
postData += postDataChunk;
}); //异步post数据接收完毕后执行匿名回调函数
req.addListener("end",function(){ var postStr=JSON.stringify(querystring.parse(postData));
res.writeHead(200,{'content-Type':'text/plain'});
res.end(postStr+'
'+req.method);
});
}).listen(1400,"127.0.0.1");
然后再新建一个request_post.js
var request=require("request");
request.post('http://127.0.0.1:1400',{form:{'name':'ermu','book':'node.js'}},function (error,response,result) {
console.log(result);
})
像上面一样在cmd中执行后显示的结果如下:
D:
odejssrc
equest>node request_post.js
{"name":"ermu","book":"node.js"}
POST
request post提交了一个json对象{"name":"ermu","book":"node.js"}而服务器接通过获取该POST数据,然后返回客户端,同时将http请求方式也响应到客户端。
request post参数可以有两种传递方式。
其中,第一种是将url和form表单的数据作为json参数在request post传递。举例如下:
request.post('url':'http://127.0.0.1:1400',form:{'name':'ermu','book':'node.js'}},function (error,response,result) {
console.log(result);
})
另一种是将url和form作为两个参数,上面的实例就是使用这种方法。
六、 Formidable模块
该模块的目的是为了解决文件上传。
在原生的node.js模块中,提供了获取post数据的方法,但是并没有直接获取上传文件。
7. nodejs如何与java交互 java和nodejs交互
品牌型号:联想GeekPro 2020
系统:win10 1909 64位企业版
nodejs与java怎么交互呢?下面就给大家介绍一下nodejs与java的交互方法。
先贴代码:
主页面的html
index.html:
food
other
然后是服务器端的代码,运行方式是在node环境下输入命令:node server.js
server.js:
let http = require(http);
let qs = require(querystring);
let server = http.createServer(function(req, res) {let body = ; // 一定要初始化为 不然是undefined
req.on(data, function(data) {body += data; // 所接受的Json数据
});
req.on(end, function() {res.writeHead(200, { // 响应状态
Content-Type: text/plain, // 响应数据类型
Access-Control-Allow-Origin: * // 允许任何一个域名访问
});
if(qs.parse(body).name == food) {res.write(apple);
} else {res.write(other);
}
res.end();
});
});
server.listen(3000);
引入的qs模块用于解析JSON
req.on(data, callback); // 监听客户端的数据,一旦有数据发送过来就执行回调函数
req.on(end, callback); // 数据接收完毕
res // 响应
客户端的js(功能就是负责一些DOM操作以及发送ajax请求)
client.js:
let btn1 = document.getElementById(btn1);
let btn2 = document.getElementById(btn2);
let content = document.getElementById(content);
btn1.addEventListener(click, function() {ajax(POST, http://127.0.0.1:3000/, name=+this.innerHTML);
});
btn2.addEventListener(click, function() {ajax(POST, http://127.0.0.1:3000/, name=+this.innerHTML);
});
// 封装的ajax方法
function ajax(method, url, val) { // 方法,路径,传送数据
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {if(xhr.readyState == 4) {if(xhr.status = 200 xhr.status 300 || xhr.status == 304) {content.innerHTML = xhr.responseText;
} else {alert(Request was unsuccessful: + xhr.status);
}
}
};
xhr.open(method, url, true);
if(val)
xhr.setRequestHeader(Content-Type, application/x-www-form-urlencoded);
xhr.send(val);
}