当前位置: 移动技术网 > IT编程>开发语言>JavaScript > node学习笔记

node学习笔记

2020年07月14日  | 移动技术网IT编程  | 我要评论

Node

1.Node.js介绍

node.js是一个javascript运行时环境,可以解析和执行javascript代码,不是一门语言,不是库,不是框架。
node.js中的javascript

  • 没有BOM、DOM
  • EcmaScript
  • 在node这个运行时执行环境中为javascript提供了一些服务i器级别的操作ApI,例如文件读写、网络服务的构建、网络通信、http服务器等处理
  • 构建于google的v8引擎上
  • event-driven 事件驱动
  • non-blocking I/O model 非阻塞IO模型(异步)
  • 轻量、高效
  • npm世界上最大的开源库生态系统,绝大多数javascript相关的包都存放在npm上,这样做的目的是为了让开发人员更方便的去下载使用

2.起步

2.1.安装Node环境

  • 查看当前Node环境的版本
  • 下载:https://nodejs.org/en/download/
  • 安装
    – 傻瓜式的一路next
    – 已经安装过的,重新安装就会升级
  • 确认Node环境是否安装成功
    – 打开命令行输入 node --version 或者 node -v
  • 环境变量

2.2.HelloWorld

1.创建编写javascript脚本文件
2.打开终端,定位到脚本文件所属目录
3.输入 node 文件名 执行对应的文件

  • 解释执行javascript
  • 读写文件
  • http
// 1.加载http核心模块
const http  = require('http')
// 文件模块
const fs = require('fs')

// 2.使用http.createServer()方法,创建一个web服务器
// 返回一个Server实例
const server = http.createServer()

// 接收请求 处理请求 发请求 发送响应
server.on('request', function(req, res) {
	//设置 响应头Content-Type
    res.setHeader('Content-Type','text/html; charset=utf-8')
    // 读文件
    fs.readFile('./hello.html', function(err,data) {
        if(err) {
        	// 发送响应数据,同时结束响应
            res.end('获取资源失败')
        }else {
            res.end(data)
        }
    })
})

// 绑定端口,开启服务器
server.listen(3000, function() {
    console.log('服务器已开启,可通过127.0.0.1:3000访问!')
})

3.Node中的javascript

3.1.EcmaScript

3.2.核心模块

Node为javascript提供了许多服务器级别的api。这些api都被包装到一个具名的核心模块中。
例如文件操作的fs模块、http服务构建的http模块,路径模块path、操作系统信息模块os。。。

需要使用核心模块,必须先使用require方法加载

const fs = require('fs')
const http = require('http')

4.Web服务器开发

4.1.ip地址和端口号

  • ip地址用来定位计算机
  • 端口号用来定位具体的应用程序
  • 一切需要互联网通信的软件都会占用一个端口号
  • 在计算机中有一些默认端口号,最好不要去使用 例如http服务的80,mysql数据库的3306

4.5.Content-Type

http://tool.oschina.net/

解析请求路径中的查询字符串 url.parse()
如何在node中实现服务器重定向
在请求头中设置location
状态码 302 临时重定向 301永久重定向

5.Node中的模块系统

使用node编写应用程序主要就是在使用:

  • EcmaScript语言
    和浏览器不一样,node中没有dom、bom
  • 核心模块
    fs、http、path、url、os
  • 第三方模块
    通过npm下载
  • 自己写的模块
  • 加载规则以及加载机制
  • 循环加载

路径形式模块

  • ./当前目录,不可省略
  • . ./父目录,不可省略

5.1.什么是模块化

  • 文件作用域
  • 通信规则
    加载require
    导出exports

5.2.加载规则

核心模块
核心模块文件已经被编译到二进制文件中,只需要按照名字加载就可以
例:require(‘http’)
第三方模块
凡是第三方模块都必须通过npm下载
使用的时候,就可以通过require(‘包名’)形式加载使用
既不是核心模块又不是路径形式的模块
先找到当前文件所处目录中的node_modules目录
node_modules/art-template
node_modules/art-template/package,json文件
node_modules/art-template/package,json文件的main属性
main属性就记录了art-template的入口模块
然后加载使用这个第三方包

	如果package.json不存在或main指定的入口模块也没有
	则node自动去找该目录下的 index.js

	如果以上任何一个条件都不成立,则会进入上一级目录的node_modules目录查找
	如果上一级还没有,继续往上一级查找
	如果知道当前磁盘根目录还找不到,就报错:can not find module xxx

5.3.npm

node package manager

5.3.1.npm常用命令

npm --version
npm install --global npm
npm init -y 跳过向导 初始化
npm install 包名
npm i 包名
只下载
npm install --save 包名
npm i -s
下载并保存依赖项
npm uninstall 包名
只删除
npm un 包名
npm uninstall --save 包名
删除的同时也会把依赖信息去掉
npm un -s 包名
npm 命令 --help
查看指定命令的使用帮助

5.3.2.解决npm被墙问题

npm存储包文件的服务器在国外,有时候会被墙,速度很慢,需要解决这个问题
淘宝开发团队把npm在国内作了备份
安装淘宝的cnpm
npm install --global cnpm (–global 表示安装到全局)
接下来就使用cnpm安装包
例:cnpm install jquery

5.4.package.json

建议每一个项目都有一个package.json文件(包描述文件。就像产品的说明书)
这个文件可通过 npm init 的方式自动初始化出来
建议执行npm install 包名的时候都加上–save,来保存依赖项
即使node_modules删除了也不用担心,只需要,npm install 就会自动把package.json中的dependencies中所有的依赖都下载回来

6.Express

原生的http在某些方面表现不足以应对我们的开发需求,而使用框架可提高我们的开发效率。这里学习以express为主。

6.1.起步

安装:

npm install --save  express

案例:

// express框架
const express = require('express')
// 创建服务器
const app = express()
// 路径模块
const path = require('path')
// body-parser模块
const bodyParser =require('body-parser')
// 路由
const router = require('./routes/router.js')
// session
const session = require('express-session')

// 开放静态资源
app.use('/public', express.static(path.join(__dirname, 'public')))
app.use('/node_modules', express.static(path.join(__dirname, 'node_modules')))

// 配置模板引擎
app.engine('html', require('express-art-template'))

// 配置body-parser
app.use(bodyParser.urlencoded( {extended: false}))
app.use(bodyParser.json())

// 挂载session
app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true
  }))

// 挂载路由
app.use(router)

// 绑定端口,开启服务器
app.listen(3000, () => {
    console.log('Server is running!')
})

6.2.在Express中配置使用art-template模板引擎

安装

npm install art-template
npm install express-art-template

配置

app.engine('art', require('express-art-template'))

使用

app.get('/', function (req, res) {
	// express默认回去项目中的views目录中查找
	res.render('', {
		title: 'hello world'
	})
})

修改默认的views视图渲染存储目录

app.set(‘views’, 目录路径)

7.MongoDB

安装
启动

 # 默认使用执行mongod命令所处盘符根目录下的/data/db 作为自己的数据存储目录
 # 所以在第一次执行命令之前,自己手动新建一个 /data/db
 mongod  

如果想修改默认的数据存储目录,可以

mongod --dbpath=数据存储目录路径

停止
ctrl+c 或直接关闭开启服务的控制台

连接

mongo

退出

exit

基本命令

  • show dbs 查看显示所有数据库
  • db 查看当前操作的数据库
  • use 数据库名 切换到指定数据库

在node中如何操作MongoDB数据库

  1. 使用官方的mongodb包来操作
  2. 使用第三方mongoose来操作MongoDB数据库
    mongoose安装 npm i mongoose
// mongoose框架
const mongoose = require('mongoose')
// 连接数据库
mongoose.connect('mongodb://localhost/admin', { useNewUrlParser: true, useUnifiedTopology: true  })

const Schema = mongoose.Schema

const userSchema = new Schema({
    email: {
        type: String,
        required: true
    },
    uname: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    create_time: {
        type: Date,
        default: Date.now
    },
    last_modified_time: {
        type: Date,
        default: Date.now
    },
    avatar: {
        type: String,
        default: '/public/images/avatar-default.png'
    },
    bio: {
        type: String,
        default: ''
    },
    gender: {
        type: Number,
        enum: [-1, 0, 1],
        default: 1
    },
    birthday: {
        type: Date
    },
    status: {
        type: Number,
        // 0 没有限制
        // 1 不能评论
        // 2 不能登录
        enum: [0, 1, 2],
        default: 0
    }
})

const User = mongoose.model('User', userSchema)

module.exports = User

8.其它

8.1.代码风格

  • Airbnb JavaScript Style
  • JavaScript Standard Style

8.1.1代码无分号问题

当一行代码以

  • (
  • [
  • 以上三者开头,最好在其之前补上一个分号

8.2.解决代码写完自动重启服务问题

可以使用第三方命令行工具nodemon,来解决修改代码频繁启动服务器问题。
安装: npm install --global nodemon --global安装的包都可以在任意目录执行
安装完成之后,使用:nodemon app.js 来启动服务,它会自动监视你的文件变化,当文件发生变化时,自动帮你重新启动服务器。

8.3.文件操作路径和模块路径

文件操作路径

// 在文件操作的相对路径中
// ./data/a.txt 相对于当前目录
// data/a.txt 相对于当前目录
// /data/a.txt 绝对路径,当前文件模块所处磁盘根目录
// c:/xx/xx 绝对路径
fs.readFile('./data/a.txt', function (err, data) {
	if (err) {
		// ...
	}
	// ...
}) 

模块操作路径

//磁盘根目录
require('/data/foo.js')

//相对路径
require('./data/foo.js')

//模块加载的路径中的相对路径不能省略 ./

本文地址:https://blog.csdn.net/rosecurry/article/details/107255017

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网