The methods of the nodejs http module are: 1. createServer(), which can create a server instance; 2. listen(), which starts the server to listen to the specified port; 3. setHeader(); 4. write(); 5. end(); 6. get(); 7. request(), etc.
The operating environment of this tutorial: windows7 system, nodejs version 12.19.0, DELL G3 computer.
1 Basic usage
##1.1 Module properties
1.1.1 Attributes of HTTP requestsheaders: Headers of HTTP requests.
#url: The requested path.
1.2 Module methods
1.2.1 http module methodscreateServer(callback) : Create a server instance.
listen(port): Start the server to listen to the specified port.
setHeader(key, value): Specify HTTP header information.
write(str): Specify the content of the HTTP response.
end(): Send HTTP response.
1.3 Processing GET requests
Http module is mainly used to build
HTTP service. Building an HTTP server using Node.js is very simple.
var http = require('http'); http.createServer(function (request, response){ response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World\n'); }).listen(8080, "127.0.0.1"); console.log('Server running on port 8080.');
means loading the http module
, creates a server instance and assigns it to the variable http.
accepts a function as a parameter. The
request parameter of the function is an object, representing the client's HTTP request.
indicates that the server responds with an HTTP header; the
response.end method indicates the specific content of the server's response, and
closes the conversation after the response is completed.
means to start the server instance and listen to the
8080 port of the local machine
Save the above lines of code into a file app.js, and then use node to call this file, and the server will start running. $ node app.js
"Server running at port 8080.". Open the browser and visit
http://localhost:8080. The web page displays
"Hello world!".
The above example is to generate a web page on the spot. You can also write the web page in advance, save it in a file, and then use the fs module to read the web page file and return it.
var http = require('http'); var fs = require('fs'); http.createServer(function (request, response){ fs.readFile('data.txt', function readData(err, data) { response.writeHead(200, {'Content-Type': 'text/plain'}); response.end(data); }); }).listen(8080, "127.0.0.1"); console.log('Server running on port 8080.');
var http = require("http"); http.createServer(function(req, res) { // 主页 if (req.url == "/") { res.writeHead(200, { "Content-Type": "text/html" }); res.end("Welcome to the homepage!"); } // About页面 else if (req.url == "/about") { res.writeHead(200, { "Content-Type": "text/html" }); res.end("Welcome to the about page!"); } // 404错误 else { res.writeHead(404, { "Content-Type": "text/plain" }); res.end("404 error! File not found."); } }).listen(8080, "localhost");
: URL of the request
: HTTP request method
: All HTTP header information of HTTP requests.
1.4 Processing POST requests
When the client uses thePOST method to send data, the server can process
data and
end two events, set up listening functions.
var http = require('http'); http.createServer(function (req, res) { var content = ""; req.on('data', function (chunk) { content += chunk; }); req.on('end', function () { res.writeHead(200, {"Content-Type": "text/plain"}); res.write("You've sent: " + content); res.end(); }); }).listen(8080);
dataThe event will be triggered every time a piece of data is received during the data receiving process, and the received data is passed into the callback function. The
end event is triggered after all data reception is completed.
By slightly modifying the above code, you can create the file upload function.
"use strict"; var http = require('http'); var fs = require('fs'); var destinationFile, fileSize, uploadedBytes; http.createServer(function (request, response) { response.writeHead(200); destinationFile = fs.createWriteStream("destination.md"); request.pipe(destinationFile); fileSize = request.headers['content-length']; uploadedBytes = 0; request.on('data', function (d) { uploadedBytes += d.length; var p = (uploadedBytes / fileSize) * 100; response.write("Uploading " + parseInt(p, 0) + " %\n"); }); request.on('end', function () { response.end("File Upload Complete"); }); }).listen(3030, function () { console.log("server started"); });
2 Make a request
2.1 get()
##get methodUsed to issue get requests. <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">function getTestPersonaLoginCredentials(callback) {
return http.get({
host: &#39;personatestuser.org&#39;,
path: &#39;/email&#39;
}, function(response) {
var body = &#39;&#39;;
response.on(&#39;data&#39;, function(d) {
body += d;
});
response.on(&#39;end&#39;, function() {
var parsed = JSON.parse(body);
callback({
email: parsed.email,
password: parsed.pass
});
});
});
},</pre><div class="contentsignin">Copy after login</div></div>
is used to issue HTTP request
, its usage format as follows. <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">http.request(options[, callback])</pre><div class="contentsignin">Copy after login</div></div>
The options parameter of the request method can be an object or a string. If it is a string, it means that this is a URL, and Node will automatically call
internally to process this parameter. options object
can set the following properties<ul><li><code>host
:HTTP请求所发往的域名或者IP地址,默认是localhost
hostname
:该属性会被url.parse()解析,优先级高于host。port
:远程服务器的端口,默认是80。localAddress
:本地网络接口。socketPath
:Unix网络套接字,格式为host:port或者socketPath。method
:指定HTTP请求的方法,格式为字符串,默认为GET。path
:指定HTTP请求的路径,默认为根路径(/)。可以在这个属性里面,指定查询字符串,比如/index.html?page=12。如果这个属性里面包含非法字符(比如空格),就会抛出一个错误。headers
:一个对象,包含了HTTP请求的头信息。auth
:一个代表HTTP基本认证的字符串user:password。agent
:控制缓存行为,如果HTTP请求使用了agent,则HTTP请求默认为Connection: keep-alive,它的可能值如下:undefined
(默认):对当前host和port,使用全局Agent。Agent
:一个对象,会传入agent属性。false
:不缓存连接,默认HTTP请求为Connection: close。keepAlive
:一个布尔值,表示是否保留socket供未来其他请求使用,默认等于false。keepAliveMsecs
:一个整数,当使用KeepAlive的时候,设置多久发送一个TCP KeepAlive包,使得连接不要被关闭。默认等于1000,只有keepAlive设为true的时候,该设置才有意义。request
方法的callback参数
是可选的,在response事件发生时触发,而且只触发一次。http.request()
返回一个http.ClientRequest类
的实例。它是一个可写数据流,如果你想通过POST方法发送一个文件,可以将文件写入这个ClientRequest对象
。var postData = querystring.stringify({ 'msg' : 'Hello World!' }); var options = { hostname: 'www.google.com', port: 80, path: '/upload', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': postData.length } }; var req = http.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); req.on('error', function(e) { console.log('problem with request: ' + e.message); }); // write data to request body req.write(postData); req.end();
注意
,上面代码中,req.end()
必须被调用,即使没有在请求体内写入任何数据,也必须调用。因为这表示已经完成HTTP请求
。
发送过程的任何错误(DNS错误、TCP错误、HTTP解析错误
),都会在request对象上触发error事件
。
3 搭建HTTPs服务器
搭建HTTPs
服务器需要有SSL
证书。对于向公众提供服务的网站,SSL证书
需要向证书颁发机构购买;对于自用的网站,可以自制。
自制SSL证书需要OpenSSL,具体命令如下。
openssl genrsa -out key.pem openssl req -new -key key.pem -out csr.pem openssl x509 -req -days 9999 -in csr.pem -signkey key.pem -out cert.pem rm csr.pem
上面的命令生成两个文件:ert.pem(证书文件)
和 key.pem(私钥文件)
。有了这两个文件,就可以运行HTTPs服务器了。Node.js
提供一个https
模块,专门用于处理加密访问。
var https = require('https'); var fs = require('fs'); var options = { key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem') }; var a = https.createServer(options, function (req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000);
上面代码显示,HTTPs服务器与HTTP服务器的最大区别,就是createServer
方法多了一个options参数
。运行以后,就可以测试是否能够正常访问。
curl -k https://localhost:8000
更多node相关知识,请访问:nodejs 教程!
The above is the detailed content of What are the methods of nodejs http module. For more information, please follow other related articles on the PHP Chinese website!