node.js是一个javascript运行时环境,可以解析和执行javascript代码,不是一门语言,不是库,不是框架。
node.js中的javascript
1.创建编写javascript脚本文件
2.打开终端,定位到脚本文件所属目录
3.输入 node 文件名 执行对应的文件
// 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访问!')
})
Node为javascript提供了许多服务器级别的api。这些api都被包装到一个具名的核心模块中。
例如文件操作的fs模块、http服务构建的http模块,路径模块path、操作系统信息模块os。。。
需要使用核心模块,必须先使用require方法加载
const fs = require('fs')
const http = require('http')
http://tool.oschina.net/
解析请求路径中的查询字符串 url.parse()
如何在node中实现服务器重定向
在请求头中设置location
状态码 302 临时重定向 301永久重定向
使用node编写应用程序主要就是在使用:
路径形式模块
核心模块
核心模块文件已经被编译到二进制文件中,只需要按照名字加载就可以
例: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
node package manager
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
查看指定命令的使用帮助
npm存储包文件的服务器在国外,有时候会被墙,速度很慢,需要解决这个问题
淘宝开发团队把npm在国内作了备份
安装淘宝的cnpm
npm install --global cnpm (–global 表示安装到全局)
接下来就使用cnpm安装包
例:cnpm install jquery
建议每一个项目都有一个package.json文件(包描述文件。就像产品的说明书)
这个文件可通过 npm init 的方式自动初始化出来
建议执行npm install 包名的时候都加上–save,来保存依赖项
即使node_modules删除了也不用担心,只需要,npm install 就会自动把package.json中的dependencies中所有的依赖都下载回来
原生的http在某些方面表现不足以应对我们的开发需求,而使用框架可提高我们的开发效率。这里学习以express为主。
安装:
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!')
})
安装
npm install art-template
npm install express-art-template
配置
app.engine('art', require('express-art-template'))
使用
app.get('/', function (req, res) {
// express默认回去项目中的views目录中查找index.html
res.render('index.html', {
title: 'hello world'
})
})
修改默认的views视图渲染存储目录
app.set(‘views’, 目录路径)
安装
启动
# 默认使用执行mongod命令所处盘符根目录下的/data/db 作为自己的数据存储目录
# 所以在第一次执行命令之前,自己手动新建一个 /data/db
mongod
如果想修改默认的数据存储目录,可以
mongod --dbpath=数据存储目录路径
停止
ctrl+c 或直接关闭开启服务的控制台
连接
mongo
退出
exit
基本命令
在node中如何操作MongoDB数据库
// 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
当一行代码以
可以使用第三方命令行工具nodemon,来解决修改代码频繁启动服务器问题。
安装: npm install --global nodemon --global安装的包都可以在任意目录执行
安装完成之后,使用:nodemon app.js 来启动服务,它会自动监视你的文件变化,当文件发生变化时,自动帮你重新启动服务器。
文件操作路径
// 在文件操作的相对路径中
// ./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')
//模块加载的路径中的相对路径不能省略 ./