• node.js初探超越昨天的自己系列(3)


    超越昨天的自己系列(3)

      其实,学习这事总是被动的,有一天,当我们明白需要努力学习的时候,才发现,知识的世界是那么的浩淼,见不到岸,甚至见不到日出,迷雾重重,困惑的我们很容易甩一甩手不想继续了。所以说:进步从来都不是件容易的事情。

    ------------------------------------------

    node.js 接触接触,学习点新东西,对未来的自己总是好的。

     从这里开始:http://www.nodejs.org/

    1,require 问题
    如下代码:
    http = require("http");
    http作为module(模块)导入进来,这样就可以使用它的方法了。类似java里的import。
    javascript本身不支持module,如此就出现了所谓的CommonJS

    CommonJS(http://www.commonjs.org)规范的出现,其目标是为了构建JavaScript在包括Web服务器,桌面,命令行工具,及浏览器方面的生态系统。

    CommonJS制定了解决这些问题的一些规范,而Node.js就是这些规范的一种实现。Node.js自身实现了require方法作为其引入 模块的方法,同时NPM也基于CommonJS定义的包规范,实现了依赖管理和模块自动安装等功能。

    基本的写法如下:

    1.modulea.js

     

    module.exports.add = function add(n,m){
        var count = n + m;
        console.log(n + "+" + m + "=" + count);
        return count;
    };

     

    2.moduleb.js

    a = require("./modulea");
    a.add(1,2);

    比较具体的例子可以参考这文章:

    http://openmymind.net/2012/2/3/Node-Require-and-Exports/

     2,关于回调函数

    在node.js的编码中大量使用了函数回调,先熟悉一下:

    实例一

    1. function invoke_and_add(a,b){  
    2.   return a()+b();  
    3. }  
    4.   
    5. function one(){  
    6.   return 1;  
    7. }  
    8.   
    9. function two(){  
    10.   return 2;  
    11. }  
    12.   
    13. invoke_and_add(one ,two);  

    结果为3;

     

    实例二 匿名函数

    1. invoke_and_add(function(){return 1;},function(){return 2;})  

    我们用匿名函数替代了 one,two两个函数。

    通过上面两个实例,回调函数的定义为:传递一个函数A到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称,就叫做匿名回调函数

     至于回调和异步的关系,可以参考这篇文章:

    http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html

    3,hello world

    用node.js构建一个服务器,简单到发指,入门文章中都有提到。

    var http = require("http");
    
    http.createServer(function(request, response) {
      response.writeHead(200, {"Content-Type": "text/plain"});
      response.write("Hello World");
      response.end();
    }).listen(8888);

    监听8888端口,任何请求都会打印Hello World。

    4,关于实现一个调用baidu地图的api

    通过坐标,请求具体地址,就是发送个http请求而已,连解析返回值都没做,呵呵

    
    http = require("http");
    var key="37492c0ee6f924cb5e934fa08c6b1676";
    var location="39.983424,%20116.322987";
    var output="json";
    var path = "/geocoder?location=" + location + "&output=" + output + "&key=" + key
    var resultJson="";
    
    options={
        host:"api.map.baidu.com",
        method:"get",
        path:path
    };
    //http://api.map.baidu.com/geocoder?output=json&location=39.983424,%20116.322987&key=37492c0ee6f924cb5e934fa08c6b1676
    //http://api.map.baidu.com/geocoder?location=纬度,经度&output=输出格式类型&key=用户密钥
    req = http.request(options, function(res){
        //console.log('STATUS: ' + res.statusCode);
        //console.log('HEADERS: ' + JSON.stringify(res.headers));
        // 取body内容
        res.on('data', function (chunk) {
            console.log('BODY: ' + chunk);
            resultJson = resultJson + chunk;
        });
        console.log('resultJson: ' + resultJson);
    });
    req.on('error', function(e) {
        console.log('problem with request: ' + e.message);
    });
    
    req.end();
    //返回结果:
    /**
     * resultJson:
     BODY: {
        "status":"OK",
        "result":{
            "location":{
                "lng":116.322987,
                "lat":39.983424
            },
            "formatted_address":"北京市海淀区中关村大街27号1101-08室",
            "business":"人民大学,中关村,苏州街",
            "addressComponent":{
                "city":"北京市",
                "district":"海淀区",
                "province":"北京市",
                "street":"中关村大街",
                "street_number":"27号1101-08室"
            },
            "cityCode":131
        }
    }
     **/

    --------------------------------------------------

    让我们继续前行!

  • 相关阅读:
    第十四周 Leetcode 315. Count of Smaller Numbers After Self(HARD) 主席树
    POJ1050 To the Max 最大子矩阵
    POJ1259 The Picnic 最大空凸包问题 DP
    POJ 3734 Blocks 矩阵递推
    POJ2686 Traveling by Stagecoach 状态压缩DP
    iOS上架ipa上传问题那些事
    深入浅出iOS事件机制
    iOS如何跳到系统设置里的各种设置界面
    坑爹的私有API
    业务层网络请求封装
  • 原文地址:https://www.cnblogs.com/killbug/p/3113961.html
Copyright © 2020-2023  润新知