zoukankan      html  css  js  c++  java
  • node.js 学习笔记(二)简单使用

    上次我们介绍了node 的定义和作用以及怎么安装,这次说说它的模块化系统

    一、如何使用node执行js文件?

    可以用cmd或git base here执行

    先建一个简单的js文件,输入如下

    var foo = 'hello nodejs'
    
    console.log(foo)

    然后定位到该文件位置打开终端,输入 node helloworld.js——helloworld.js是文件名,操作过程如下图

    注:文件名不能起名为node.js;尽量避免使用中文命名

    二、在 Node 中,采用 EcmaScript 进行编码,没有 BOM、DOM

    新建js文件No BOM and DOM.js,里面代码如下

    console.log(window);
    console.log(document)

    运行

     三、node读取文件

    我们知道在 Node 中,采用 EcmaScript 进行编码,没有 BOM、DOM和浏览器中的 JavaScript 不一样,但它能操作文件。

    node提供了几种核心模块,其中 fs(file-system 的简写,就是文件系统的意思)就提供了所有的文件操作相关的 API,这里先简单说下

    使用步骤如下:

    3.1使用 require 方法加载 fs 核心模块

    var fs = require('fs')

    3.2读取文件

    fs.readFile(读取的文件路径,回调函数(error,data))

    3..3结果

    成功: data 数据;error null

    失败:data undefined没有数据; error 错误对象

    3.4 运行

    js文件代码

    var fs = require('fs');
    
    fs.readFile('./data/a.txt', function (error, data) {
            console.log(data);
      })

     解析:因为文件中存储的其实都是二进制数据 0 1,这里把二进制转换成十六进制了,可以通过tostring()转换下,

    新的js文件代码

    var fs = require('fs');
    
    fs.readFile('./data/a.txt', function (error, data) {
            console.log(data.toString());
      })

     四、写入文件

    write_wenjian.js

    var fs = require('fs')
    
    // 第一个参数:文件路径
    // 第二个参数:文件内容
    // 第三个参数:回调函数

    // 成功:
    // 文件写入成功
    // error 是 null
    // 失败:
    // 文件写入失败
    // error 就是错误对象

    
    fs.writeFile('./data/b.txt', '大家好,给大家介绍一下,我是Node.js', function (error) {
       console.log('文件写入成功');
       console.log(error);
      if (error) {
        console.log('写入失败');
      } else {
        console.log('写入成功了');
      }
    })

    运行

     我们可以看见在data文件夹多了

    五、核心模块http

    node通过http模块构建一个web服务器,

    一般而言服务器都是停供服务,停供对数据的服务:

    过程是从客户端发请求——>服务器接收请求——>服务器处理请求——>发送响应回客户端

    先来个简单点的

    // 1.加载 http 核心模块

    var
    http = require('http'); // 2. 使用 http.createServer() 方法创建一个 Web 服务器 // 返回一个 Server 实例 var server = http.createServer(); // 3. 注册 request 请求事件 // 当客户端请求过来,就会自动触发服务器的 request 请求事件,然后执行第二个参数:回调处理函数 server.on('request', function () { console.log('收到客户端的请求了'); }) // 4. 绑定端口号,启动服务器 server.listen(3000, function () { console.log('服务器启动成功了,可以通过 http://127.0.0.1:8080/ 来进行访问'); })

    运行:

     高级一点的写法,但不能根据不同的请求路径发送不同的响应结果

    var http = require('http')
    
    var server = http.createServer()
    
    // request 请求事件处理函数,需要接收两个参数:
    //    Request 请求对象
    //        请求对象可以用来获取客户端的一些请求信息,例如请求路径
    //    Response 响应对象
    //        响应对象可以用来给客户端发送响应消息
    server.on('request', function (request, response) {
     
      console.log('收到客户端的请求了,请求路径是:' + request.url)
    
      // response 对象有一个方法:write 可以用来给客户端发送响应数据
      // write 可以使用多次,但是最后一定要使用 end 来结束响应,否则客户端会一直等待
      response.write('hello')
      response.write(' nodejs')
    
      // 告诉客户端,我的话说完了,你可以呈递给用户了
      response.end()
    })
    
    server.listen(3000, function () {
      console.log('服务器启动成功了,可以通过 http://127.0.0.1:3000/ 来进行访问')
    })

    运行

     

     如图,不过路径怎么改,显示永远不变

    所以,用下面这种

    var http = require('http')
    
    // 1. 创建 Server
    var server = http.createServer()
    
    // 2. 监听 request 请求事件,设置请求处理函数
    server.on('request', function (req, res) {
      console.log('收到请求了,请求路径是:' + req.url)
      console.log('请求我的客户端的地址是:', req.socket.remoteAddress, req.socket.remotePort)
      var url = req.url
    
      if (url === '/') {
        res.end('index page')
      } else if (url === '/login') {
        res.end('login page')
      } else if (url === '/products') {
        var products = [{
            name: '苹果 X',
            price: 8888
          },
          {
            name: '菠萝 X',
            price: 5000
          },
          {
            name: '小辣椒 X',
            price: 1999
          }
        ]
    
    
        res.end(JSON.stringify(products))
      } else {
        res.end('404 Not Found.')
      }
    })
    
    // 3. 绑定端口号,启动服务
    server.listen(3000, function () {
      console.log('服务器启动成功,可以访问了。。。')
    })

    运行

    注:响应内容只能是二进制数据或者字符串

    数字、对象、数组、布尔值等需进行转化。

  • 相关阅读:
    Allegro绘制PCB流程
    KSImageNamed-Xcode
    UIApplicationsharedApplication的常用使用方法
    javascript中间AJAX
    hdu1845 Jimmy’s Assignment --- 完整匹配
    嵌入式控制系统和计算机系统
    Bean行为破坏之前,
    jsonkit 分解nsarray 时刻 一个错误
    IO 字符流学习
    2013级别C++文章9周(春天的)工程——运算符重载(两)
  • 原文地址:https://www.cnblogs.com/smile-xin/p/11599529.html
Copyright © 2011-2022 走看看