nodejs学习之旅01

nodejs是什么东西?

javascript的一个运行环境,没有bom与dom

必须依赖npm

命令行:nodejs –version  //查看版本号

 

nodejs中的javascript

 

helloworld案例

进入目录

该目录下有如下js文件

tips: shift+右键 可以在当前位置打开命令行

通过Node运行js文件(文件名不能为node.js)

 

读写文件

读文件

var fs = require(“fs”);

param1:要读取的文件路径 param2:回调函数

成功 data 有数据 error null

失败 data null  error 错误对象

fs.readFile(‘./data/hello.txt’,function(error,data)){

      //读取出来的是二进制,但是它会转成十六进制

      //无论是什么进制,都可以用toString方法转化为我们能认识的字符

       console.log(data,toString());

}

写文件

var fs = require(‘fs’)

param1:文件路径 param2:文件内容 param3:回掉函数

成功:error null

失败:error 就是错误对象

terminal插件:sumblime的插件,可以命令行定位到页面位置

fs.writeFile(‘./data/’,’我是nodejs’,function(error){

      console.log(‘文件写入成功’)

      if(error){

           console.log(‘读取文件失败了’);

}else{

      console.log(data.toString());


}

})

 

简单的http服务器

你可以使用node搭建一个简单的web服务器

在node中专门提供了核心模块:http

  1. 加载http核心模块
var http = require(‘http’);
  1. 使用http.createServer() 创建一个web服务器,

返回一个server实例

var servere = http.createServer()
  1. 提供服务,提供数据(处理请求)
server.on(‘request’,function(request,response){

      //会自动获取端口号后面的地址

           //好像spring中的@RequestMapping("/{page}")

    public String showPage(@PathVariable String page){

       return page;  }

      //127.0.0.1:3030/abc 结果就为abc

console.log(“收到客户端的请求了,请求路径是”+request.url)

//这里写响应请求,最后一定要写end结束响应

response.write(“响应成功”)

response.end();

//思考,如何响应不同的路径,返回不同的结果

})
  1. 绑定端口号,启动服务器
server.listen(3000,function(){

      console.log(‘服务器启动成功了,可以通过http://localhost:3000/访问’)

})

启动顺序

 

根据不同的路径响应不同的数据

server.on(‘request’,function(req,res){

var url = req.url;

if(url===’/’){

      res.end(‘index page’);

}else if(url===’/login’){

      res.end(‘login page’);

}else{

      res.end(‘404 not found’)

}

})

响应js对象

由于res.end()只能响应的内容只能是二进制数据或者字符串

数字,对象,数组不能响应,所以需要转化为json数据

var product = [

      {name:’苹果x’,

      price:8888

}

];
res.end(JSON.stringify(product));

监听端口号:

req.socket.remoteAddress;

req.socket.remotePort;

端口号范围:0-65536之间

设置编码:

res.setHeader(‘content-Type’,’text/plain;charset=utf-8’);

读取文件

if(url===”/”){

      fs.readFile(‘./…/json’,function(err,data){

           if(err){

           res.setHeader(‘content-Type’,’text/plain;charset=utf-8’);

           res.end(‘文件读取失败’);

}else{

      //文件是二进制数据,可以通过toString转字符串

      //res.end支持二进制与字符串

            res.end(data);

}

});

}

读取网页并响应

server.on(‘request’,function(req,res){

      var url = req.url;

      fs.readFile(‘./templete.html’,function(err,data){

           if(err){

                 return res.end(‘404 not found’);

}

res.end(data);

})

})

得到当前目录的下的文件  如何将文件名与目录名替换到templete.html中?

fs.readFile(‘目录’,function(err,files){

      if(err){

      return console.log(‘目录不存在’);

}

console.log(files);

})

使用模板引擎

 

如何将拼接字符串

var content = ‘’;

files.forEach(function(item){

      //在EcmaScript6的`字符串中 可以使用${}来引用变量

      content+=`

<tr>

      <td data-value=”apple/”><a href=”#”>${item}</a>

</tr>`

})

nodejs核心模块

node为javascript提供了很多服务器级别的API,这些API绝大多数包含到了一个具体的核心模块中,如文件操作模块fs,http构建的http模块,path路径操作模块,os操作系统信息模块。

而require就是获取模块的方法

 

require

require这个api是加载文件并执行的意思

相对路径必须加./(表示文件所在当前目录),那么上级路径呢?../

如何加载自定义的模块(所谓自定义的模块就是自己创建的js文件)

require(‘./b.js’);

node中没有全局作用域,只有模块作用域,就是说加载的模块里面的成员变量不会影响当前模块的成员变量

外部访问不到内部,内部也访问不到外部,就像是黑盒子

模块是如何进行通信?

拿到被加载文件中的模块导出的接口对象

在每个文件中都提供了一个对象,exports,默认是一个Null对象

var bExceports = require(‘./b’);

console.log(bExceports.foo);

console.log(bExceports.add(10,30));

b.js

 

模板引擎art-templete

//全局安装
npm install -g webpack
//安装到你的项目目录
npm install --save-dev webpack
npm init

输入这个命令后,终端会问你一系列诸如项目名称,项目描述,作者等信息,

// 安装Webpack
npm install --save-dev webpack

回到之前的空文件夹,并在里面创建两个文件夹,app文件夹

npm install art-template

<script

src=”node_modules/art-template/lib/template-web.js”></script>


<script type=”text/template” id=”tp1”>

      hello {{ name }}

//{ { } }与法被被称为mustache语法 八字胡语法

</script>

<script type=”text/template”>

      var ret = template(‘tp1’,{

           name:’jack’

});

console.log(ret);

</script>

 

在node中使用art-template

在普通的html中只能通过<script>加载

var template = require(‘art-template’);

install中的名字是什么,require加载的名字就是什么

 

template.render(‘模板字符串’,替换对象)

template.render(‘{{ name }}’,{name: ‘jack’});

//注意:param1必须是字符串

如果你想通过读取预先写好的html文件,必须先使用toString方法

fs.readFile(‘./tpl.html’,function(err,data){

      if(err){

      return console.log(‘读取文件失败’);

}

var ret = template.render(data.toString,json)

});

 

响应html页面

var htmlStr = template.render(data.toString,json)

res.end(htmlStr);

 

模板引擎遍历数组

{{ each files}}

      {{$value}}

{{/each}}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值