全称:node pageage manager
官网: https://www.npmjs.com/
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题
步骤
1.先去上面官网搜索需要的模块,查看文档
2.创建一个非中文且不与模块同名的文件夹,打开终端输入
npm init -y
//会生成一个package.json文件,记录模块的大版本信息
3.在终端先输入输入,配置npm指向淘宝镜像(只需要输入第一次)
设置npm为淘宝镜像,npm为淘宝镜像
npm config set registry https://registry.npm.taobao.org/
//恢复npm地址
npm config set registry https://registry.npmjs.org
再输入
第一次导入这个模块,输入
npm i 模块名
//生成一个package-lock.json和node_modules文件,npm5版本后才有,记录模块的详细信息,如果模块node_modules被删除了,第二次导入这个模块,输入
npm i
//不需要加模块名,package-lock.json里面存了版本信息
4.将文档的模板代码复制下来放在自己创建js文件中
package-lock.json
文件及node_modules
文件夹package-lock.json
中package.json
中也会保存一份node_modules
中会保存,下载的第三方模块如果 package.json 及 package-lock.json中已经记录了第三方模块信息
npm i
读取记录的信息,自动全部下载
步骤
1.先去上面官网搜索crawler,查看文档
2.创建一个非中文文件夹,打开终端输入
npm init -y
3.在终端先输入输入,配置npm指向淘宝镜像(只需要输入第一次)
设置npm为淘宝镜像,npm为淘宝镜像
npm config set registry https://registry.npm.taobao.org/
//恢复npm地址
npm config set registry https://registry.npmjs.org
再输入
npm i crawler
4.将文档的模板代码复制下来放在自己创建js文件中
1.查看文档 http://www.expressjs.com.cn/
2.,创建一个非中文文件夹,在终端输入
npm init -y
3.再输入,下载并安装模块包
npm install express
4.将文档中的代码复制到js文件中
//基本使用,但是将返回的数据写死了
const express = require('express')
const app = express()
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(3000);
利用 Express 托管静态文件
//参考相对路径(启动node进程的目录),容易出错
app.use(express.static('public'))
如果要使用多个静态资源目录,请多次调用 express.static
中间件函数:
app.use(express.static('public'))
app.use(express.static('files'))
注意:为获得最佳结果,请[使用反向代理]缓存来提高服务静态资产的性能。
为该express.static
函数提供的文件创建虚拟路径前缀(文件系统中实际不存在该路径),并提供绝对路径
app.use('/static', express.static(path.join(__dirname, 'public')))
升级后代码
const express = require('express')
const path = require('path')
const app = express()
//'/static'可以不写,后面输入网址也就不写/static
app.use('/static', express.static(path.join(__dirname, 'public')))
//app.get('/', function (req, res) {
// res.send('Hello World')
//})
app.listen(3000);
http://localhost:3000/static/images/kitten.jpg
http://localhost:3000/static/css/style.css
http://localhost:3000/static/js/app.js
http://localhost:3000/static/images/bg.png
http://localhost:3000/static/hello.html
路由模块
网址
http://www.expressjs.com.cn/guide/routing.html 找到express router
为什么要拆分路由
基本使用
1.创建app.js
//导包
const express = require('express')
const path = require('path')
const bodyParser = require('body-parser')
const cors = require('cors')
//找到userRouter.js文件的路径进行拼接
const userRouter = require(path.join(__dirname, 'route', 'userRouter.js'))
//创建服务器
const app = express();
//解决跨域问题
app.use(cors());
// 设置请求头
app.use(bodyParser.urlencoded({ extended: false }))
//导入用户路由
app.use('/user',userRouter);
//监听服务器
app.listen(3000, () => {
console.log('success');
})
2.创建route文件夹,里面建立userRouter.js
const express = require('express')
//调用express中的router方法,分发路由
const router = express.Router()
const path = require('path')
//导入数据库连接模块,db模块是自己写的,目的是为了将服务器与数据库进行连接
const db = require(path.join(__dirname,'../utils','db.js'))
console.log(db);
//用户注册
router.post('/register',(req,res)=>{
// console.log(req);
//获取用户输入的用户名和密码
const {username,password} = req.body;
// console.log(username,password);
//查询数据库,看用户名是否被注册
db.connection.query(`select username,password from user where username = '${username}'`,(error,results)=>{
if(error == null){
if(results.length == 0){
//长度为空说明找不到改用户名,可以注册
//将数据添加到数据库
db.connection.query(`insert into user(username,password)values('${username}','${password}')`,(err,data)=>{
if(err==null){
res.send({
code:200,
msg:'注册成功'
})
}
})
}else{
//不为0,则说明已经存在,被注册
res.send({
code:400,
msg:'该用户名已经被注册'
})
}
}else{
res.send({
code:500,
msg:'服务器内部错误'
})
}
})
})
//用户登录
//注意此处不是app了而是router
router.post('/login',(req,res)=>{
//获取用户输入的用户名和密码
const {username,password} = req.body;
//查询数据库,看用户名和密码是否正确
db.connection.query(`select username,password from user where username = '${username}' and password = '${password}'`,(error,results)=>{
if(error == null){
//判断results的length属性是否为0,为0则用户名或密码错误
if(results.length == 0){
res.send({
code:400,
msg:'用户名或密码错误'
})
}else{
//不为0,则输入正确
res.send({
code:200,
msg:'登录成功'
})
}
}else{
res.send({
code:500,
msg:'服务器内部错误'
})
}
})
})
//将router暴露出去
module.exports = router
3.创建utils文件夹,db.js在(5.暴露模块)那里
作用
nodemon是一种工具,通过在检测到目录中的文件更改时自动重新启动节点应用程序来帮助开发基于node.js的应用程序
网址:
https://www.npmjs.com/package/nodemon
安装
先初始化,输入
npm init -y
nodemon将全局安装到您的系统路径
npm install -g nodemon
用于在执行脚本时nodemon
替换node
命令行上的单词
作用
把post的文本数据放到 req.body属性中
网址
https://www.npmjs.com/package/body-parser
安装
在终端输入
npm i body-parser
使用案例
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
//使用 body-parser 第三方模块, 作用是设置请求头
//设置请求头的意思是, 把用户传递过来的参数转成url的格式
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
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))
})
作用
Multer 会添加一个 body
对象 以及 file
或 files
对象 到 express 的 request
对象中
网址
https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md
注意: Multer 不会处理任何非 multipart/form-data
类型的表单数据。
安装
npm i multer
基本使用
var express = require('express')
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
var app = express()
app.post('/profile', upload.single('avatar'), function (req, res, next) {
// req.file 是 `avatar` 文件的信息
// req.body 将具有文本域数据,如果存在的话
})
app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
// req.files 是 `photos` 文件数组的信息
// req.body 将具有文本域数据,如果存在的话
})
var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/cool-profile', cpUpload, function (req, res, next) {
// req.files 是一个对象 (String -> Array) 键是文件名,值是文件数组
//
// 例如:
// req.files['avatar'][0] -> File
// req.files['gallery'] -> Array
//
// req.body 将具有文本域数据,如果存在的话
})
上面uploads文件夹中的图片是不带格式的,可以通过下面方法创建uploads文件夹
//导包
const multer = require('multer')
//uploads文件夹路径
const picPath = path.join(__dirname,'../uploads')
const storge = multer.diskStorage({
//创建uploads文件夹
destination: function (req, file, cb) {
cb(null, picPath)
},
//文件名
filename: function (req, file, cb) {
cb(null, "hero" + '-' + Date.now()+'.png')
}
})
const upload = multer({ storage: storge })
作用
解决浏览器访问接口时不能跨域的问题
网址
https://www.npmjs.com/package/cors
安装
npm i cors
基本使用
var express = require('express')
var cors = require('cors')
var app = express()
app.use(cors())
app.get('/products/:id', function (req, res, next) {
res.json({msg: 'This is CORS-enabled for all origins!'})
})
app.listen(80, function () {
console.log('CORS-enabled web server listening on port 80')
})
介绍
这是mysql的nodejs驱动程序,可以让我们将node.js与数据库连接起来,进行增删改查
基本使用
//导包
var mysql = require('mysql');
//和要操作的数据库建立连接
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',//修改成自己数据的用户名
password : 'secret',//修改成自己数据的密码
database : 'my_db'//自己设置的库
});
//开启连接
connection.connect();
//第一个参数是要执行的sql语句
connection.query('select * from person', function (error, results, fields) {
//报错信息, 如果沒有错就是null
console.log(error);
//执行sql語句後返回的結果
console.log(results);
//是字段描述
console.log(fields);
});
//关闭连接
connection.end();
// Cannot enqueue Query after invoking quit.
// 原因:意思是使用connection.end的时候,connection已经关闭了.
//解决办法:
//1.将connection.end注释掉
//2.重新建立连接,将代码封装成函数,下面调用
let connection;
function setConnect() {
//设置与数据库的连接
connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'user'
});
//连接开启
connection.connect();
}
介绍
设置和获取cookie的插件
基本使用
在终端输入
npm i cookie-parser
//导包
const express = require('express')
const cookieParser = require('cookie-parser')
//开启服务器
const app = express()
//调用模块
app.use(cookieParser())
//注册路由,设置cookie
app.get("/setCookie",(req, res) => {
console.log(res.cookie("add", "hello", { maxAge: 900000 }));
res.send('hehe')
})
//注册路由,获取cookie的值
app.get("/getCookie",(req,res)=>{
console.log(res.cookie.add);
res.send('haha')
})
//监听服务器
app.listen(3000, () => {
console.log('success');
})
// Importing a local module:
const myLocalModule = require('./path/myLocalModule');
// Importing a JSON file:
const jsonData = require('./path/filename.json');
// Importing a module from node_modules or Node.js built-in module:
const crypto = require('crypto');
//导包
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
//const multer = require('multer');
//找到自己编写的js文件,通过path.join拼接成绝对路径,并用变量接收
const dbPath = path.join(__dirname, 'utils', 'db.js');
//将模块路径导入
const db = require(dbPath);
//解决跨域的包
//const cors = require('cors');
//创建upload文件夹
//const upload = multer({ dest: 'uploads/' })
//创建服务器
const app = express();
//设置请求头,将数据设置为url键值对格式
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
//app.use(cors());
//查询英雄列表(获取所有的英雄)
app.get('/list',(req,res)=>{
//获取所有的英雄逻辑代码
//调用db中的getHeros方法.
const data = db.getHeros();//返回的就是所有的英雄数据
if(data){
res.send({
code:200,
msg:"获取成功",
data
});
}else {
res.send({
code:400,
msg:"获取失败"
});
}
});
使用module.exports将模块暴露出去
//db.js文件
//导入mysql包
const mysql = require('mysql')
//将本地服务器与数据库链接
const connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root',
database : 'user'
});
//链接开启
connection.connect();
//将connection这个对象暴露出去
module.exports = {
connection//属性简写实际是connection:connection
}
//链接结束
// connection.end();