node的命令
-
-
npm 查看包 的所有可下载版本
- 命令: npm view 包名 versions
- 示例: npm view express versions
-
-
-
npm 下载 指定版本的 包
- 命令: npm i 包名@你需要下载的版本号
- 示例: npm i express@3.4.1
-
-
-
npm 卸载指定的包
- 命令: npm uninstall 包名 || npm un 包名
- 示例: npm uninstall express || npm un express
-
-
-
npm 下载所有的包 (package.json中记录的所有的包)
-
- 右键json文件终端打开(这一步的目的是为了确保 终端的路径是正确的)
-
- 输入命令: **npm install || npm i **
-
-
-
npm切换淘宝源
- 命令: npm config set registry registry.npmmirror.com/
- 将来到公司,可能需要设置为公司的源
- 示例: npm config set registry 公司源的地址
- 如果npm下载的时候,下载一半卡着不动了,直接ctrl+c结束下载,或者关闭终端
-
-
-
npm 清除缓存
- 命令: npm cache clear -f (终端路径无所谓)
- 手动删除:
-
- C盘
-
- 用户
-
- 用户名
-
- AppData (这是一个隐藏的项目)
-
- Roaming
-
- 找到 npm-cache,然后删除这个文件夹
-
认识nodemon
-
可以理解为一个"软件", 只不过看不到而已
-
这个软件可以帮助我们提供一个 与 node一样的环境, 去运行我们的JS代码
-
他就是基于node.js 开发出来的一个"软件"
-
安装命令: npm i nodemon -g (全局安装,这种方式安装完毕之后,你在电脑的任意一个文件目录内都可以使用)
-
如何使用:
- 以前 => node index.js
- 现在 => nodemon index.js
-
使用区别:
- node 启动的JS文件修改代码后,需要重新启动重新运行才能看到最新的效果
- nodemon 启动的JS文件修改代码后, 不需要重新启动, 直接能看到每次更新的代码
-
使用场景:
- node 项目书写完毕后,使用一次
- nodemon 项目正在开发的时候使用,这样可以避免每次修改代码需要重新在终端执行一次node
express开启基础服务器.js
-
需求: 借助 express 框架帮助我们搭建一个简易的服务器
-
因为express可以理解为第三方包
-
所以使用流程为:
-
- 通过 npm下载到本地
-
- 引入到当前文件中
-
- 按照说明文档去使用
-
// 0. 引入第三方包
const express = require('express')
// 1. 创建一个服务,为什么调用express就能得到一个服务器,这是框架写好的东西,我们只需要记住就行了
const server = express()
// 2. 监听一个端口号
server.listen(8080, () => {
console.log('服务开启成功,端口号为8080') //此时就可以去页面中访问这个服务器,直接输入localhost:端口号
})
复制代码
启动终端, 输入nodemon 文件名, 然后打开浏览器输入localhost:8080 运行
开启静态资源
先准备文件:client文件夹>view文件夹>index.html
- 需求: 前端会给我们一个写完了的静态页面,我们负责放在服务器中
- 配置服务器,将前端给我们的"静态资源"展示出去
// 0. 引入第三方包
const express = require('express')
// 1. 创建一个服务
const server = express()
/**
* 重点: 不要纠结哪来的方法,这些方法都是框架给的!!!
* 1.1 配置静态资源
* 将来如果有请求的路径是/static,会运行后边的内容
*
* 将来如果有请求的路径是/static,会将它切换为/client
* 如果我们的页面路径是: http://localhost:8080/static/view/index.html
* 相当于我们写了http://localhost:8080/client/view/index.html
* */
server.use('/static', express.static('./client'))
// 2. 监听一个端口号
server.listen(8080, () => {
console.log('服务开启成功,端口号为8080') //此时就可以去页面中访问这个服务器,直接输入localhost:端口号
})
复制代码
启动终端, 输入nodemon 文件名, 然后打开浏览器输入http://localhost:8080/static/view/index.html 运行
修改inde.html文件内容,引入client文件夹下css文件夹下的index.css文件和client文件夹下js文件夹下的index.js文件
-
因为服务器内做了配置,只要是以'/static'开头的访问都会去到'/client这个目录内
- 具体配置需要查看index.js中的server.use() 开启静态资源
-
修改内容如下:
<link rel="stylesheet" href="../css/index.css"><script src="../js/index.js"></script> -
换种方式引入:
<link rel="stylesheet" href="/static/css/index.css"><script src="/static/js/index.js"></script>
接收前端请求
接收前端请求.js(服务器端文件)
// 0. 引入第三方包
const express = require('express')
// 1. 创建一个服务
const server = express()
// 1.1 配置静态资源
server.use('/static', express.static('./client'))
// 1.2 服务器的代码, 接收前端请求
server.get('/goods/list', (req, res) => {
// console.log('如果一个请求是get方式,并且地址是/goods/list的话,我会输出')
/**
* 第一个形参: 内部为请求报文
* 第二个参数: 内部为响应报文,需要返回给前端的内容,放在这个形参内就好了
* */
/**
* send() 由express框架提供,用来给前端返回一些内容
* */
res.send({
code: 1,
msg: '您请求的 /goods/list 接口成功'
})
})
server.post('/users/info', (req, res) => {
// 如果请求是post方式,并且请求的路径是/users/info,那么会执行这个函数
res.send({
code: 1,
msg: '您请求的/users/info 地址成功'
})
})
// 2. 监听一个端口号
server.listen(8080, () => {
console.log('服务开启成功,端口号为8080')
})
复制代码
修改client文件夹下js文件夹下的index.js文件
console.log('我是index.js中输出的一串文本')
// 前端的代码, 发送一个请求
function myAjax1() {
// console.log('向服务端发起一个请求')
const xhr = new XMLHttpRequest()
xhr.open('get', '/goods/list')
xhr.onload = function() {
console.log(JSON.parse(xhr.responseText))
}
xhr.send()
}
myAjax1()
function myAjax2() {
// console.log('向服务端发起一个请求')
const xhr = new XMLHttpRequest()
xhr.open('post', '/users/info')
xhr.onload = function() {
console.log(JSON.parse(xhr.responseText))
}
xhr.send()
}
myAjax2()
复制代码
引入controller目录
- 新建controller文件夹,在其下面新建users.js文件和goods.js文件
user.js文件如下:
// 专门存储请求与用户有关的请求处理函数
exports.postUsersInfo = (req, res) => {
res.send({
code: 1,
msg: '您请求的/users/info 地址成功'
})
}
exports.postUsersSetName = (req, res) => {
res.send({
code: 1,
msg: '您请求的/users/setName 地址成功'
})
}
复制代码
goods.js文件如下:
// 专门存储与请求商品有关的处理函数
exports.getGoodsList = (req, res) => {
res.send({
code: 1,
msg: '您请求的 /goods/list 接口成功'
});
}
exports.getGoodsInfo = (req, res) => {
res.send({
code: 1,
msg: '您请求的 /goods/info 接口成功'
})
}
复制代码
服务端代码如下:
// 0. 引入第三方包
const express = require('express')
const { getGoodsList, getGoodsInfo } = require('./controller/goods')
const { postUsersInfo, postUsersSetName } = require('./controller/users')
// 1. 创建一个服务
const server = express()
// 1.1 配置静态资源
server.use('/static', express.static('./client'))
// 1.2 服务器的代码, 接收前端请求
server.get('/goods/list', getGoodsList)
server.get('/goods/info', getGoodsInfo)
server.post('/users/info', postUsersInfo)
server.post('/users/setName', postUsersSetName)
// 2. 监听一个端口号
server.listen(8080, () => {
console.log('服务开启成功,端口号为8080')
})
复制代码
注释: 在服务器端代码中server.get()的第二个参数,当建好goods.js文件并且导出代码写好后,在引入的时候只需要敲一部分代码,找到对应的变量,点回车,可以直接生成引入第三方包.
引入路由表.js
修改服务端代码如下:
// 0. 引入第三方包
const express = require('express')
const { getGoodsList, getGoodsInfo } = require('./controller/goods')
const { postUsersInfo, postUsersSetName } = require('./controller/users')
// 1. 创建一个服务
const server = express()
// 1.1 配置静态资源
server.use('/static', express.static('./client'))
// 1.2 服务器的代码, 接收前端请求
// server.get('/goods/list', getGoodsList)
// server.get('/goods/info', getGoodsInfo)
// server.post('/users/info', postUsersInfo)
// server.post('/users/setName', postUsersSetName)
/**
* 新的概念:路由表
* 如何配置路由表
* express 提供给我们了一个制作路由表的方法
* 语法: express.Router()
* 返回值: 一张空的路由表
* */
const GoodsRouter = express.Router()
// 向空的路由表上添加内容
GoodsRouter.get('/list', getGoodsList)
GoodsRouter.get('/info', getGoodsInfo)
// 注册使用这个路由表
server.use('/goods', GoodsRouter)
// 在创建一张空的路由表
const UsersRouter = express.Router()
// 向空的路由表上添加内容
UsersRouter.post('/info', postUsersInfo)
UsersRouter.post('/setName', postUsersSetName)
// 注册使用这个路由表
server.use('/users', UsersRouter)
// 2. 监听一个端口号
server.listen(8080, () => {
console.log('服务开启成功,端口号为8080')
})
复制代码
引入路由总表与router目录
-
准备文件:
-
先创建一个client文件夹,在其下边新建三个文件夹分别是css,js,view,在这三个文件夹中分别创建文件为index.css文件,index.js文件,index.html文件
client文件夹下的css文件夹下index.css文件:
body { background-color: greenyellow; } h1 { color: palevioletred; font-family: '宋体'; } 复制代码client文件夹下的js文件夹下index.js文件:
// 前端的代码, 发送一个请求 function myAjax1() { // console.log('向服务端发起一个请求') const xhr = new XMLHttpRequest() xhr.open('get', '/goods/list') xhr.onload = function() { console.log(JSON.parse(xhr.responseText)) } xhr.send() } myAjax1() function myAjax2() { // console.log('向服务端发起一个请求') const xhr = new XMLHttpRequest() xhr.open('post', '/users/info') xhr.onload = function() { console.log(JSON.parse(xhr.responseText)) } xhr.send() } myAjax2() 复制代码client文件夹下的view文件夹下index.html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <!-- <link rel="stylesheet" href="../css/index.css"> --> <link rel="stylesheet" href="/static/css/index.css"> </head> <body> <h1>hello,我是前端写的静态页面</h1> <h1>但是我是由服务端帮我放在服务器上</h1> <!-- 因为服务器内做了配置,只要是以'/static'开头的访问都会去到'/client这个目录内 具体配置需要查看index.js 1.1 步 开启静态资源 --> <!-- <script src="../js/index.js"></script> --> <script src="/static/js/index.js"></script> </body> </html> 复制代码-
先创建一个cotroller文件夹,在其下边新建两个分表users.js文件和goods.js文件
goods.js文件如下:
// 专门存储与请求商品有关的处理函数 exports.getGoodsList = (req, res) => { res.send({ code: 1, msg: '您请求的 /goods/list 接口成功' }); } exports.getGoodsInfo = (req, res) => { res.send({ code: 1, msg: '您请求的 /goods/info 接口成功' }) } 复制代码users.js文件如下:
// 专门存储请求与用户有关的请求处理函数 exports.postUsersInfo = (req, res) => { res.send({ code: 1, msg: '您请求的/users/info 地址成功' }) } exports.postUsersSetName = (req, res) => { res.send({ code: 1, msg: '您请求的/users/setName 地址成功' }) } 复制代码 -
-
先创建一个router文件夹,在其下边新建两个分表users.js文件和goods.js文件
router文件夹下的users.js文件如下
const express = require('express')
const { postUsersInfo, postUsersSetName } = require('../controller/users')
// 在创建一张空的路由表
const UsersRouter = express.Router()
// 向空的路由表上添加内容
UsersRouter.post('/info', postUsersInfo)
UsersRouter.post('/setName', postUsersSetName)
// 导入当前路由表
module.exports = UsersRouter
复制代码
router文件夹下的goods.js文件如下
// 专门存放goods的路由表
const express = require('express')
const { getGoodsList, getGoodsInfo } = require('../controller/goods')
// 创建一张路由分表
const GoodsRouter = express.Router()
// 向空的路由表上添加内容
GoodsRouter.get('/list', getGoodsList)
GoodsRouter.get('/info', getGoodsInfo)
// 导出当前的路由分表(给 路由总表使用)
module.exports = GoodsRouter
复制代码
服务器端文件如下:
// 0. 引入第三方包
const express = require('express')
const GoodsRouter = require('./router/goods')
const UsersRouter = require('./router/users')
// 1. 创建一个服务
const server = express()
// 1.1 配置静态资源
server.use('/static', express.static('./client'))
// 1.2 使用这个路由分表
server.use('/goods', GoodsRouter)
server.use('/users', UsersRouter)
// 2. 监听一个端口号
server.listen(8080, () => {
console.log('服务开启成功,端口号为8080')
})
复制代码
- 引入总表:
在router文件夹下新建一个index.js文件:
// 专门存放goods的路由表
const express = require('express')
const GoodsRouter = require('./goods')
const UsersRouter = require('./users')
// 在创建一张路由总表
const Router = express.Router()
// 向路由总表上 添加一些路由分表
Router.use('/goods', GoodsRouter)
Router.use('/users', UsersRouter)
// 导出路由总表,给服务器使用
module.exports = Router
复制代码
修改client文件夹下的js文件夹下index.js文件:
// 前端的代码, 发送一个请求
function myAjax1() {
const xhr = new XMLHttpRequest()
xhr.open('get', '/api/goods/list')
xhr.onload = function() {
console.log(JSON.parse(xhr.responseText))
}
xhr.send()
}
myAjax1()
function myAjax2() {
const xhr = new XMLHttpRequest()
xhr.open('post', '/api/users/info')
xhr.onload = function() {
console.log(JSON.parse(xhr.responseText))
}
xhr.send()
}
myAjax2()
复制代码
引入总表后服务器端文件修改如下:
// 0. 引入第三方包
const express = require('express')
const Router = require('./router')
// 1. 创建一个服务
const server = express()
// 1.1 配置静态资源
server.use('/static', express.static('./client'))
// 1.2 使用这个路由总表
server.use('/api', Router)
// 2. 监听一个端口号
server.listen(8080, () => {
console.log('服务开启成功,端口号为8080')
})
复制代码
-
注: 在终端输入nodemon 文件名,打开浏览器输入http://localhost:8080/static/view/index.html 运行
-
控制台输出结果:
-