Home > Web Front-end > JS Tutorial > body text

How to use http module in node.js

亚连
Release: 2018-06-09 16:59:43
Original
2239 people have browsed it

This article mainly introduces an in-depth understanding of the node.js http module. Now I will share it with you and give you a reference.

The http module is mainly used to build HTTP servers and clients. The http module must be called to use the HTTP server or client functions.

Create server

var http = require(“http”);var url = require(“url”);//创建服务器//http继承自tcpvar server = http.createServer(function (req,res) {  var urlstr = req.url;//获取请求的路径  var urlMethod = req.method;//获取请求的方法  var urlObj = url.parse(urlstr,true);  console.log(urlObj);  
  console.log(urlMethod);  res.end(“hello”);});server.listen(8080);
Copy after login

Process the request

Requests are divided into two types: get and post, get request url If the address has parameters, req.url can obtain the parameters, while the post request is more complicated. Use req.on() to handle post requests.

Post request method: read using req.on("data"function(){}), use str string concatenation, and read in req.on("end",function(){}) After fetching, the output str is the parameter we want to send in the post request;

get request method: use url.parse(req.url,true).query on the request address to get the parameters.

var http = require("http");
var fs = require("fs");
var url = require("url");
var querystring = require("querystring");
var server = http.createServer(function (req,res) {
  console.log(req.method);
  var pathname = url.parse(req.url,true).pathname;
  if(pathname=="/"){
  //  加载注册页面
    var rs = fs.createReadStream("post.html");
    rs.pipe(res);
  }else if(pathname=="/post"){
    // 处理post请求
    var str = "";
    req.on("data",function (chunk) {
      // console.log(chunk.toString());
      str += chunk;
    });
    req.on("end",function(){
      var postObj = querystring.parse(str);
      console.log(postObj);
    })
  }else if(pathname=="/get"){
    // get请求
    var getObj = url.parse(req.url,true).query;
    res.write(JSON.stringify(getObj));
    res.end();
  }else if(pathname!="/favicon.ico"){
    var rs = fs.createReadStream("."+pathname);
    rs.pipe(res);
  };
});
server.listen(8787);
Copy after login

Upload file processing

The front-end html code is as follows: I won’t go into details.

<form action=“/upimg” method=“post” enctype=“multipart/form-data”>

用户名: <input type=“text” name=“user”><br> 

密码: <input type=“password” name=“pass”><br>

上传图片: <input type=“file” name=“file1”><br> 

<input type=“submit” value=“提交”></form>
Copy after login

To implement file upload, you need to introduce the formidable module var formidable = require("formidable"); if there is no such module, enter npm install formidable in the terminal to install it.

form.parse(req,function(err,fields,fies){}) method callback function three parameters

  1. err: return error message

  2. fields: The fields returned by the post request and the corresponding values ​​

  3. fies: The uploaded file object, which contains many detailed information of the file

After obtaining the file information, use the data stream to read and write to copy the file

var http = require("http");
var fs = require("fs");
var url = require("url");
// 文件上传
var formidable = require("formidable");
var server = http.createServer(function(req,res){
  var pathname = url.parse(req.url,true).pathname;
  if(pathname=="/"){
    var rs = fs.createReadStream("uploads.html");
    rs.pipe(res);
  }else if(pathname=="/uploads"){
    // 实例化一个formidable类
    var form = new formidable.IncomingForm();
   // 调用parse方法
    form.parse(req,function(err,fields,files){
      if(err){
        return console.log(err);
      }else{
        // console.log("字段",fields);
        // 存储字段
        var fieldStr = JSON.stringify(fields);
        fs.writeFileSync("1.txt",fieldStr);
        // 转存文件
        if(!fs.existsSync("uploads")){
          fs.mkdir("uploads");
        }
       // 随机路径
        var filePath = files.img.path;
        var rs = fs.createReadStream(filePath);
        var ws = fs.createWriteStream("./uploads/"+files.img.name);
        rs.pipe(ws);
        rs.on("data",function (chunk) {
          
        })
        rs.on("end",function(){
          console.log("复制成功");
          res.write("上传成功");
          res.end();
        })
        res.setHeader("Content-type","text/html;charset=utf8");  
        console.log("文件",files);
      }
    })

  }else if(pathname!="/favicon.ico"){
    var rs = fs.createReadStream("."+pathname);
    rs.pipe(res);
  }
});
server.listen(8880);
Copy after login

http simulation client

Mainly options Configuration, the most basic parameters are as follows code block.

  1. method: Describe the request method;

  2. host: Server IP, here we take localhost as an example;

  3. port: server port number;

  4. path: request path;

http.createServer() is no longer used to create the server at this time Instead, use http.request() to request the server, and the rest is almost the same as the server.

// 通过nodejs模拟客户端
var http = require("http");
var options = {
  method:"post",
  host:"localhost",
  port:2121,
  path:"/"
};
var request = http.request(options,function (res) {
  var str = "";
  res.on("data",function(chunk){
    str += chunk;
  });
  res.on("end",function () {
    console.log(str);
  })
});
var obj = {
  name:"李四",
  age:20
}
request.write(JSON.stringify(obj));
request.end();
Copy after login

The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.

Related articles:

How to implement navigation with ElementUI in vue-router

Detailed explanation of introducing elementUI components into vue projects

Refresh and tab switching in vue

How to set the background color for a separate page in Vue-cli

About the use of Material in Angular2 (detailed tutorial)

How to use the Lodash method in Angular?

Use native js to realize three-level linkage between provinces and municipalities

The above is the detailed content of How to use http module in node.js. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template