定义:node.js其实就是JS的运行环境,浏览器就是JS的运行环境,简单的说 Node.js 就是运行在服务端的 JavaScript。
node的安装
node这个安装是傻瓜式安装,除了安装路径之外,其他一直点next就行了,安装完成后在dos中输入node -v如果显示版本号那么就说明安装成功了。
切换下载源
在安装node的时候,会默认安装一个工具,叫npm,npm是一个下载工具,我们所需要的第三方模块一般都需要用这个工具去下载,但是其下载地址在国外,所以下载贼慢,我们就可以利用第三方模块切换下载源,将其切换到国内。
nrm模块
首先下载,dos中进行全局安装
npm install nrm -g
下载好之后,可以用nrm ls查看都有那些下载源
接着就可以去切换下载源了nrm use taobao
创建一个服务器
在node中,没有像java中的tomcat一样,可以提供web服务。 在node,如果你要想提供web服务,你就需要自己创建一台web服务器。先整一个入门级的创建服务器代码
let http = require("http"); // 本质是一个对象
let server = http.createServer();
server.on("request",function (req,res) {
res.writeHead(200,{"content-type":"text/html; charset=utf-8"})
res.write("<h1>你好,客户端,我是服务器~</h1>");
res.end(); // 告诉客户端,内容响应完毕了 结束响应
})
server.listen(3000,()=>{
console.log("服务器运行起来了")
})
node.js实现热部署
当你用node.js创建了一个服务器后,只要你修改了代码,就必须要重启服务器,这个就很麻烦,那么我们就可以安装一个第三方模块nodemon,这玩意会监听你的代码,如果你修改代码,只需要保存一下他就会自动重启服务,比较方便。
首先 全局安装
npm i nodemon -g
然后在启动你所写的服务
nodemon +你所写的服务器路径
例 nodemon server.js
如果你是在vscode的端口上执行的一定要注意其路径是否正确。
Express脚手架
express相当于node的框架
express脚手架就是一种快速搭建项目目录结构的一个工具。
安装脚手架分三步
1,安装生成器
npm install express-generator -g
我这个是在vscode的终端进行执行的但我建议在dos中运行,这个只需要执行一次,以后直接在终端创建文件就行了。
2,创建文件
express my-project -e
其中my-project是你要创建的项目名,后面的-e是默认的views文件夹下文件为ejs,不加的话是默认的jade文件。
3,安装依赖包
cd my-project
npm install
这样一个基本的项目就搭建好了
最后热部署一下项目跑起来。注意默认端口为3000,如果向结束,就在终端ctrl+c就终止项目运行了。
修改ejs后缀
因为这个框架默认的为ejs后缀,所以你在加载html界面时,就必须的把你的html后缀改为ejs,这个就比较麻烦,所以我们可以修改后缀ejs为html。
app.set(‘views’, path.join(__dirname, ‘views’));
//告诉express使用的模板引擎为html,但其本质还是ejs的模板引擎。
app.engine(“html”,require(“ejs”).__express);
//然后修改后缀名。
app.set(‘view engine’, ‘html’);
加载界面
在这个框架中,你要将你的界面的静态资源全部放到public文件夹中,然后将html界面放到views文件夹中.如下图所示。
当然也可以把文件都放在views中,可以在views中新建一个文件夹,然后配置一下,代码如下,其中resource是我在views下创建的文件夹
app.use(express.static(path.join(__dirname, ‘views/resource’)));
配置路由
这个框架里的路由就相当于controller层,当你用express脚手架创建时,他会默认给你生成两个一级路由,文件默认放在routes文件中,你在写的时候可以直接把它自带的给删了,自己新建一个配置一下就可以了。
这样就可以访问到了,当然你也可以配置二级路径,方法和一级路径一样,先require获取自己的路径,在app.use将路由配置进去。举个例子
var admin = require(’./routes/admin/login’);
app.use(’/admin’,admin)
其中admin为我在routes文件下创建的文件,login为我写的js文件。
**需要注意,如下图所示。下面子进行重定向的时候/admin/users/login,其执行顺序为先执行/admin ,然后执行/admin/users 最后执行admin/users/login, 所以现在这个代码会陷入死循环中。同理如果将其一级路由改为app.use(’/admin/users’,checkLogin);同样也会陷入死循环中。
应该改为 app.use(’/admin/index’,checkLogin); 只要不与你要重定向的url冲突就行。 **
body-parser插件
我们在接收前台界面传来的数据的时候就需要引用第三方插件body-parser,首先引入body-parser
npm i body-parser
然后进行接收和配置,
var bodyParser = require(‘body-parser’);
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
接着就可以用req.body获取前台界面form中传过来的数据对象。
当然还有一个方法是 req.query也可以接收从前台传过来的数据
举个例子
req.query.id就可以获取id了
mongdb
安装完mongdb后如果你没把他配置到服务中,那么就得手动开启,找到其bin目录然后cmd,执行mongod --dbpath D:\mongodb其中路径为你安装mongdb的路径。
这样mongdb就启动成功了,
如果在node.js中使用mongdb,第一步引入插件
npm install mongodb
一般都会将数据库的一些操作封装起来,放在一个models文件夹中,直接上代码。
这个是封装了一个插入数据的方法
在你定义的路由文件中使用时引入就可以了。
moment插件
这个是一个获取时间的第三方插件,三步走 下载插件引入插件,使用插件
首先下载
npm install moment
引入
let moment=require(‘moment’)
使用
var time=moment().format(‘YYYY-MM-DD, h:mm:ss’);
这个获取时间格式为
2020-08-04, 10:11:19
更详细的moment介绍我推荐这个博客
cookie插件
cookie的特点就是小,它是基于浏览端的会话技术,将数据保存在浏览器端,其中cookie是作为响应头信息,从服务其端发送到浏览器端的,但是cookie有个缺点就是cookie可以写很多个,这就导致在每一次http请求中,都需要携带大量的cookie数据。会造成性能的损失,还有一点cookie是保存在浏览器端的,所以无法进行二次加工。
我们可以使用原生的setHeader方法来设置cookie,
res.setHeader(“set-cookie”,“username=andy”);
然后可以在如下图所示中看到设置的cookie。
在express中,cookie的发送,其实已经封装了相应的方法–res.cookie
例res.cookie(“username”,“admin”)
获取cookie
因为cookie是作为请求头,从浏览器端传递到服务器端的,这个操作是自动进行的,所以任何一次http请求,浏览器都会自己携带cookie,向服务端发送http请求所以我们只需要在服务端获取cookie就可以了,这里就要用得到req对象了,但是默认情况下,req对象中没有对cookie进行解析,所以不能直接获取。这里就需要用到第三方插件 cookie-parser 进行前面说的三步走,
首先下载cookie-parser
npm install cookie-parser
引用并配置
let cookieParser=require(‘cookie-parser’)
app.use(cookieParser())
使用
app.get('/',(req,res)=>{
console.log(req.cookies); //获取并输出cookies
//res.cookie("admin","qaq") /将数据存入cookie
res.cookie("user","qaq",{maxAge:10000})//将数据存入cookie并设置过期时间。
console.log(req.cookies.admin); //获取并输出你设置的cookie属性
})
Session 插件
session是将数据保存在服务器端的一种会话技术。
session的特点:安全性高,性能好,功能更强大。
直接三步走开整。
下载
npm install express-session
引用并配置
var session =require('express-session')
app.use(session({
secret: 'admin',
resave: false,
saveUninitialized: true,
cookie:{ maxAge:60000*10 } // 因为session是基于cookie的
}))
使用
app.get('/',(req,res)=>{
req.session.username='jack'; //设置session
console.log(req.session.username);//获取并输出session
})
可以利用session进行判断用户是否是二次登录。
直接上代码
首先用户登陆后 req.session.isLogin = true;给session存入一个布尔值。
其次写一个判断方法,获取session值,如果为第一次登录那么直接跳转登录界面,如果已经登录则不需要跳转。
function checkLogin(req,res,next){
if(!req.session.isLogin){
// 没有登录
res.redirect("/admin/users/login")
// console.log(“没有登录”)
}
next();
}
配置路由
app.use(’/admin/index’, checkLogin);
app.use(’/admin/index’, admin);