项目初始化
-
创建文件夹
- npm init -y
- public 用来存放静态资源(css、js、html)
- views 视图,用来存放页面(.html、.ejs)
- router 存放路由
- app.js 入口文件
-
创建app.js基本框架 (node的app.js文件配置流程)
-
引入模块
let express=require("express"); let app=express() let bodyPaser=require("body-parser"); let cookieParser=require("cookie-parser"); let session=require("express-session"); let path=require("path");
-
配置静态资源
app.use("/public/",express.static(path.join(__dirname,"./public"))); app.use("/node_modules/",express.static(path.join(__dirname,"./node_module")));
-
配置服务
-
配置session
app.use(cookieParser()); app.use(session({ secret:"test",//配置加密字符串,可以是随机的 cookie:{maxAge:60*60*1000},//设置cookie的过期时间 resave:true,//强制保存,即session的值不修改是也保存 saveUninitialized:true//无论你是否使用session,他都默认给你一把钥匙 }));
-
配置post请求解析体
app.use(bodyPaser.urlencoded({extend:true}));//true默认使用queryString库,false使用qs库 //两者的区别在于qs只是一个增加了安全性的查询字符串解析和字符串序列化的库 //queryingString则是node的核心模块,用于处理或解析url的查询字符串 app.use(bodyPaser.json());
-
配置html、ejs解析的模板引擎
app.engine("html",require("express-art-template")); app.set("views",path.join(__dirname,"./views")); //默认就是views目录
-
-
路由挂载之前必须配置好各种服务和引擎
app.use(router);
-
配置端口
app.listen(5000,()=>{ console.log("running~~~~~"); })
-
-
思考都有什么框架安装一下
- npm i express
- art-template 渲染模板
- body-parser 中间件用来获取req.body
- express-art-template 渲染页面render方法下面有详细注释
- mongoose 可以使用mongoose的方法不用自己封装方法了
- express-session 保存登录信息
- m5加密
-
设计路由
-
项目完成后利用pkg打包
具体内容:
- 项目目录
- 配置app文件(app.js)
//引入模块
let express = require('express');
let bodyParser = require('body-parser');
let path = require('path');
let app = express();
let axios = require("axios");;
// const backendUrl = process.env.APP_BACKEND_URL || 'http://127.0.0.1:32147/devoting';
axios.defaults.baseURL = 'http://coding.gardel.top:8848/devoting';
const PORT = process.env.APP_PORT || 32148;
const HOST = process.env.APP_HOST || '0.0.0.0';
const cookieParser = require('cookie-parser');
app.use(cookieParser());
//开启静态资源权限
app.use('/public/', express.static(path.join(__dirname, './public/')));
//配置模板引擎
app.engine("html", require("express-art-template"));
app.set("views", path.join(__dirname, "./views"));
//配置post请求解析体
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
//路由挂载
const mainRouter = require("./routers/mainRouter_y");
const adminRouter_user = require("./routers/adminRouter_user");
const adminRouter_admin = require("./routers/adminRouter_admin");
const adminRouter_department = require("./routers/adminRouter_depatrment");
const adminRouter_score = require("./routers/adminRouter_score");
const majorRouter = require("./routers/majorRouter_l");
const adminRouter = require("./routers/adminRouter");
app.use(mainRouter);
app.use(adminRouter_user);
app.use(adminRouter_admin);
app.use(adminRouter_department);
app.use(adminRouter_score);
app.use(majorRouter);
app.use(adminRouter);
//配置端口
app.listen(PORT, HOST, function() {
console.log(`App is running on ${HOST}:${PORT}`)
})
- 安装框架
npm i express --save //后面的具体参数可以网上找一下
- 设计路由(route.js)
let express = require("express");
let mainRouter = express.Router();
let axios = require("axios");
//跳转路由
mainRouter.get("/main/login", (req, res) => {
res.render('login_y.html', {
errorMessage: req.query['errorMessage']
})
return
})
//数据路由
mainRouter.post("/main/login", (req, res) => {
axios({
method: "post",
url: "/login",
data: {
username: req.body.username,
password: req.body.password,
rememberMe: req.body.rememberMe
}
}).then(function (data) {
//判断用户是否登录(请求头)
if (data.headers.authorization) {
res.cookie('token', data.headers.authorization, {maxAge: 14 * 24 * 60 * 60 * 1000});
}
//返回请求状态、数据
res.status(200).json(data.headers.authorization);
}).catch(function (error) {
//错误处理
res.status(error.response ? error.response.status : 500).json({
response: error.response ? error.response.data : undefined,
message: error.response ? (error.response.data.message ? error.response.data.message : '未知错误') : error.message,
status: error.response ? error.response.status : 500
})
})
})
- 打包文件(pkg)
知识点:
如何初始化node
npm init -y //-y可以快速自动生成各种信息
bootstrap.css与min.css的区别
前者没被压缩,后者被压缩
art-template的作用:
art-template 是一个简约、超快的模板引擎。它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行性能,并且同时支持 NodeJS 和浏览器。
exports和module.exports区别:
module代表的是当前模块本身
exports就是module的属性
既可以使用exports导出,也可以使用module.exports导出
exports 和 module.exports的区别:
exports只能通过.的方式向外暴露属性和方法
exports.xxx=xxx;
module.exports可以通过.的方式也可以直接赋值
module.exports.xxx=xxx;
module.exports=xxx;