美文网首页
node服务器

node服务器

作者: 广州芦苇科技web前端 | 来源:发表于2018-11-06 12:21 被阅读0次

    作者: 叶茂;
    标签: nodejs,http


    http.createServer

    function createServer(requestListener?: (request: IncomingMessage, response: ServerResponse) => void): Server;
    requsetListener: 接收到请求后的回调函数
        request: 包含请求信息的对象
        response: 包含返回信息的对象
    
    return Server: 服务器对象
    
    request.url
    • 请求的url信息可以用url模块解析。
    const http = require('http')
    const url = require('url')
    
    const server = http.createServer((request, response) => {
        
        // 获取请求参数
        // 第二个参数表示,是否将请求参数解析成对象形式
        const query = url.parse(request.url, true).query
    
        if (query.firstname) {
    
            // 设置响应头
            // 第一个参数表示状态吗,第二个参数用对象字面量表示消息头中各字段的值。
            response.writeHead(200, {'content-type': 'text/html;charset=utf8'})
    
            // 写入响应体
            response.write('Hello from node http: ')
            response.write(query.firstname.toUpperCase() + ' ')
            response.write(query.lastname.toUpperCase())
            // 完成本次响应
            response.end()
    
        } else {
            response.writeHead(400, {'content-type': 'text/html;charset=utf8'})
            response.end('bad quest')
        }
    })
    
    server.listen(8080, () => {
        console.log('listenning port 8080')
    })
    
    

    http.request

    function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
    第一个参数: 请求相关的信息,包括请求方式,请求地址等
    第二个参数:请求成功后的回调
        回调函数的第一个参数接收response对象
    
    
    • 使用fs模块读写文件。
    const http = require('http')
    const fs = require('fs')
    
    const request = http.request({
        host: 'www.talkmoney.cn'
    }, (response) => {
        if (response.statusCode >= 200 && response.statusCode < 300) {
           
            let html = ''
            // data事件表示接收到消息体
            response.on('data', (chunk) => {
                html += chunk
            })
    
            response.on('end', () => {
                fs.writeFile('./luwei.html', html, (err) => {
                    if (err) return console.log('write file failed')
                    console.log('write file success')
                })
            })
        } else {
            console.log('bad response')
        }
    })
    
    request.end()
    
    http.get()
    • 不带请求体的GET请求。
    • 仍然可以在函数第一个参数中设置请求方式不为'get'。
    • 但是调用end()方法没有效果,也不需要end()。
    const http = require('http')
    
    http.get('www.talkmoney.cn', (response) => {
        if (response.statusCode >= 200 && response.statusCode < 300) {
           console.log('good response')
        } else {
            console.log('bad response')
        }
    })
    
    

    多线程服务器

    Cluster

    • 发挥多核计算机的性能优势。
    const cluster = require('cluster');
    const http = require('http');
    const numCPUs = require('os').cpus().length;
    
    const url = require('url')
    
    if (cluster.isMaster) {
      console.log(`Master ${process.pid} is running`);
    
      for (let i = 0; i < numCPUs; i++) {
        cluster.fork();
      }
    
      cluster.on('exit', (worker, code, signal) => {
        console.log(`worker ${worker.process.pid} died`);
      });
    } else {
    
      http.createServer((req, res) => {
        res.writeHead(200);
        res.end('hello' + 'worker ' + process.pid );
      }).listen(8000);
      
    }
    
    • 总结,前端开发只要学会了http.createServer 和 http.request就可以做很多事情,包括自己写测试接口,做数据映射,写代理服务器等,可以有效助力前端开发,也有利于前端理解web系统的整体流程。

    相关文章

      网友评论

          本文标题:node服务器

          本文链接:https://www.haomeiwen.com/subject/wersxqtx.html