node.js笔记

node.js是什么?

  1. node.js不是一门语言
  2. node.js不是库,不是框架
  3. node.js是JavaScript运行时的环境
  4. 简单来说就是node.js可以解析和执行JavaScript代码,跟浏览器很像。
  5. 以前只有浏览器可以解析执行JavaScript代码,现在node.js可以脱离浏览器来运行

浏览器中的JavaScript

  • EcmaScript
  • DOM
  • BOM

node.js中的JavaScript

  • 没有DOM、BOM
  • 有EcamScript
  • 服务端不处理DOM、BOM元素
  • 在node这个JavaScript执行环境中为JavaScript提供了一些服务器级别的操作API
    例如文件读写
    网络服务的构建
    http服务器等。。

node.js特性

  • event-driven 事件驱动
  • non-blocking I/O model 非阻塞IO模型(异步)
  • lightweight and efficient 轻量和高效
  • npm
    – npm是世界上最大的开源库生态系统
    – 绝大多数JavaScript相关的包都存放在了npm上,这样做的目的是为了让开发人员更加方便的去下载使用

node.js怎么用

  1. List item
    – 先下载
    https://www.runoob.com/nodejs/nodejs-install-setup.html
    菜鸟教程写的很清楚,按照步骤走就行了
  2. 写代码的地方
    – 跟js代码一样,用hbuilder,sumlime等都可以编辑
  3. 查看结果的地方
    – 跟html不同,这个没法直接在网页中查看,可以直接在js所在文件shift加右键打开命令行,然后输入code+空行+要打开的js文件,就可以查看结果了。也可以在终端查看,也就是网页中。
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 发送响应数据 "Hello World"
response.end('Hello World\n');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

然后浏览器输入127.0.0.1:8888可以看到hello world

注意:不要用node来命名,名字中不能有空格,不能有中文字

读取文件

浏览器中的JavaScript是没有文件操作能力的,但是node.js中的JavaScript具有文件操作能力
fs是file-system的简写,就是文件系统的意思
在node中如果想要操作文件,就必须引入fs这个核心模块,这个模块提供了所有关于文件操作的API
例如fs.readFile 就是来读取文件的
先引入:var fs = require(‘fs’);
fs.readFile(‘被读文件路径’,function(error,data){
console.log(data.toString())
})
注意要toString,没有的话读出来的是二进制,用户没法查看
如果错误,error为null
可以
if(error){
console.log(错误提醒)
}else{
说明没错
}
阻塞代码实例

var fs = require(“fs”);

var data = fs.readFileSync(‘input.txt’);

console.log(data.toString());
console.log(“程序执行结束!”);
必须在读取文件完成后才能执行其他程序
非阻塞代码实例

var fs = require(“fs”);

fs.readFile(‘input.txt’, function (err, data) {
if (err) return console.error(err);
console.log(data.toString());});

console.log(“程序执行结束!”);

不需要等待文件读取完

第二个实例我们不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。
因此,阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。

头部导入

node提供了很多操作,这些操作进行前都必须引入相对应的头部,类似于java引入包一样

var os = require(‘os’)//获取机器信息的的
var http = require(‘http’)//操作网页的
var path = require(‘path’)//用来操作路径的

有了这些引入之后,就可以使用他的操作了
os.cpus()//获取当前机器的cpu信息
os.totalmem()//查看当前机器的内存
path.extname()获取括号内文件的后缀
还有很多其他操作,之后遇到在慢慢补充。

http

  1. 加载http核心模块

    var http = require(‘http’)

  2. 使用http.createServer()方法创建一个Web服务器。返回一个Server实例
    var server = http.createServer()

  3. 注册request请求事件。当客户端请求过来,就会自动触发服务器的request请求事件,然后执行第二个参数,回调处理第二个参数里的回调

    server.on(‘request’,gunction(){

    console.log(‘收到客户端的请求了’)
    )}

  4. 绑定端口号,启动服务器(不被占用的)

    server.listen(3000,function(){

    console.log('服务器启动成功了,可以通过http://127.0.0.1:3000/ 来访问)
    })

http接受数据
response对象有一个方法:write可以用来给用户端发送响应数据
write可以使用多次,但是最后一定要使用end来结束响应,要不然客户端会一直等待
response.write(‘hello’)
esponse.write(‘world’)
告诉客户端,我的话说完了,你可以呈现给用户了
response.end()

浏览器显示中文乱码问题

var http = require('http');
http.createServer(function (request, response) {
    response.end('hello 世界');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

打开浏览器显示信息:
hello 涓栫晫
很多时候都有乱码情况,我们经常遇到,只需要知道node的修改方法写在哪就行了

var http = require('http');
http.createServer(function (request, response) {
    response.setHeader('Content-type','text/plain;charset=utf-8')//加入这行代码
    response.end('hello 世界');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

打开浏览器显示信息:
hello 世界

plain指的是普通文本 如果返回的结果想被页面渲染,text/html

var http = require('http');
http.createServer(function (request, response) {
    response.setHeader('Content-type','text/plain;charset=utf-8')//加入这行代码
    response.end('<a href="">点我</a>');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

结果为一个可点击的a链接

Express

原生的http 在某些方面表现不足以应对我们的开发需求,所以我们就需要使用框架来加快我们的开发效率,框架
的目的就是提高效率,让我们的代码更高度统一。
在Node中,有很多Web开发框架,我们这里以学习express 为主。
安装
npm i -S express 命令,安装好后一个简单示范:

//0,安装
//1,引包
var express = require('express')
//2,创建服务器应用程序,原来的http.createSeaver
var app = express()
app.get('/',function(req,res){
      res.send('hello world')
})
app.listen(3000,function(){
      console.log('app is running')
})

结果显示hello world
公开文件夹

app.use('/public/',express.static('./public/'))
这样用户就可以直接访问文件夹里的内容
使用art-template模板引擎
1、安装

npm install --save art-template
npm install --save express-art-template
2、配置

app.engine( 'html', require('express-art-template'))
3、使用

app.get('/admin',function(req,res){
      res.render('user.html',{
            name:'小影'
      })
})

获取post请求
在Express中没有内置获取表单POST请求体的API,这里我们需要使用一个第三方包:body-parser.
安装:

npm install --save body-parser
配置:

var express = require('require')
//引包
var bodyParser = require('body-parser')
var app = express()
//配置body-parser
//主要加入这个配置,req上就会多出来一个属性:body
//可以直接通过req.body来获取表单POST请求数据了
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json())
app.use(function(req,res){
      res.setHeader('Content-Type','text/plain')
      res.write('you posted:\n')
      res.end(JSON.stringify(req.body,null,2))
})

先到这,之后会继续补充的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值