美文网首页
20190203 原生node版计算器

20190203 原生node版计算器

作者: 瑶九九 | 来源:发表于2019-03-19 13:26 被阅读0次

下面是最开始完成计算机后台的代码部分

var http = require('http');
var url=require('url');
http.createServer(function(req,res){
    if(req.url!=="/favicon.ico"){
        var params=url.parse(req.url,true).query;
        var num1=parseFloat(params.num1);
        var num2=parseFloat(params.num2);
        var signal=params.signal;
        var result=0;
        console.log(num1);
        console.log(num2);
        console.log(signal);
        if(num1&&num2&&signal){
            if(signal=="+"){
                result=num1+num2;
            }else if(signal=="-"){
                result=num1-num2;
            }else if(signal=="*"){
                result=num1*num2;
            }else if(signal=="/"){
                result=num1/num2;
            }else{
                console.log("请输入正确的符号");
            }
        }
        console.log(result);
        res.write(result.toString());
        res.end();
    }else{
        return;
    }
}).listen(3000,"localhost");

这部分代码是我在看菜鸟教程以及学习视频中的案例模仿过来的
其中引入了两个模块,分别为‘http’以及‘url'
查阅了官方文档中关于http.createServer()部分的内容:官方文档的写法为http.createServer([options][, requestListener]),该方法返回一个新建的http.Server实例,其中requestListener是一个自动添加到’request‘事件的函数。
var params=url.parse(req.url,true).query;这里面的url.parse()方法在官方文档中的写法为url.parse(urlString[, parseQueryString[, slashesDenoteHost]]),返回URL对象,其中urlString为要解析的URL字符串,parseQueryString为布尔值,如果设置为true,则返回的URL对象的query属性会是一个使用 querystring 模块的 parse() 生成的对象; 如果设为 false,则 query 会是一个未解析未解码的字符串。 默认为 false
response.write(chunk[, encoding][, callback])该方法会发送一块响应主体,可以多次调用该方法以提供连续的响应主体片段。第一次调用该方法时,会将缓冲的响应头信息和主体的第一个数据块发送给客户端。
response.end([data][, encoding][, callback])方法向服务器发出信号,表示已发送所有响应头和主体,必须在每个响应上调用方法response.end()
如果指定了data,就相当于先调用response.write(data,encoding)将data先写入response中传递给前端,再调用response.end(callback)

上面的代码实现的是通过表单提交然后跳转页面查看到计算结果,那时候接触过来的nodejs学习视频或者文章之类的都是通过表单实现前后台交互,但那时候想做成不跳转就能在当前页面上查看到计算结果的样式,但是一直实现不了,就一直卡在这里了
后面在网上找案例的时候,找到了一个使用XHR实现异步刷新的代码,然后模仿着写出来了

let xmlHttp=new XMLHttpRequest();//初始化一个XMLHttpRequest对象
            console.log(str.value);
            xmlHttp.onreadystatechange=function () {//当readyState属性发送变化时调用函数
                if(xmlHttp.readyState===4 && xmlHttp.status===200){
                    str.value=xmlHttp.responseText;//接受到后台返回的数据并赋值给str
                }
            };
            xmlHttp.open('POST',url,true);//向指定URL发送POST请求
            xmlHttp.send("result="+str.value);//向指定URL发送参数
var http=require('http');//引入http模块
var server=http.createServer(function (req,res) {//创建一个服务器
    var result='';
    req.on('data',function (data) {//接受传递过来的参数
        result=data.toString();//把传递过来的参数类型变成string
        let array=result.split('=');//分割数学表达式,得到需要求值的部分
        let partTwo=eval(array[1]);
        result=partTwo.toString();//转换值的类型,变成string
        console.log(result);
    });
    req.on('end',function () {//监听response流的end事件
        res.writeHead(200,{//向请求发送响应头以及200的HTTP状态码
            'Content-Type':'text/plain',//设置数据以文本形式编码
            'Access-Control-Allow-Origin': '*',//解决跨域问题
            'Access-Control-Allow-Methods':'POST',
            'Access-Control-Allow-Headers':'x-requested-with,content-type'
        });
        res.write(result);//把result发送给客户端
        res.end();//完成请求,向服务器发出完成信号
    })
});
server.listen(3000,function () {//监听3000端口
    console.log('server start at localhost:3000');
});

这部分代码里面查了response.writeHead(statusCode[, statusMessage][, headers]),目的是向请求发送响应头,这个方法只能在消息上调用一次,并且需要在调用response.end()之前调用

相关文章

  • 20190203 原生node版计算器

    下面是最开始完成计算机后台的代码部分 这部分代码是我在看菜鸟教程以及学习视频中的案例模仿过来的其中引入了两个模块,...

  • Electron 使用Node原生模块

    本节我们学习如何在 Electron 中使用 Node 原生模块。 Electron 支持原生的 Node 模块,...

  • 原生node

    module.exports和exports的区别? module.exports和exports的区别:在Com...

  • 上手Node开发

    原生 Node 安装 node 至Node.js 官网下载 Node LTS 版本(长期支持版本) 安装你喜欢的编...

  • 房贷计算器

    最近房产版升级,需要重新制作房贷计算器的功能,主要参考了 房天下房贷计算器和安居客房贷计算器,两大平台的计算器。 ...

  • 模仿jQuery

    封装函数 用原生DOM和js模仿jQuery的功能。 1.0版本 不能输入选择器字符串。只能输入单个node,操作...

  • 基于原生node 文件型数据库

    基于原生node 文件型数据库

  • node模块化开发(一个简单的例子)

    node 模块化开发,主要分为以下几个步骤: 下面做一个简单地计算器,通过node REPL环境可计算结果。 非模...

  • Electron使用Node原生模块

    Electron 支持 Node 原生模块,但因为使用了与官方不同的V8版本,所以在编译本地模块时必须手动指定 E...

  • Node Sass could not find a bindi

    项目中使用node-sass 为node 14版本,但项目为node 12版本 需要运行npm rebuild n...

网友评论

      本文标题:20190203 原生node版计算器

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