# blog **Repository Path**: xiaomeng79/blog ## Basic Information - **Project Name**: blog - **Description**: No description available - **Primary Language**: HTML - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-06-08 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #blog项目 ## 安装and初始化项目 1. `npm install -g express-generator` 2. `express -e blog //初始化博客项目` 3. `cd blog && npm install //进入生成的目录并安装依赖` 4. `SET DEBUG=blog:* & npm start//设置环境变量并启动服务器` 5. `浏览器执行http://localhost:3000 查看效果` 6. `创建git忽略文件 .gitignore 将node_modules和.idea添加进去` ##生成文件说明 app.js:express的主配置文件 package.json:存储着工程的信息及模块依赖,当在 dependencies 中添加依赖的模块时,运行 npm install,npm 会检查当前目录下的 package.json,并自动安装所有指定的模块 node_modules:存放 package.json 中安装的模块,当你在 package.json 添加依赖的模块并安装后,存放在这个文件夹下 public:存放 image、css、js 等文件 routes:存放路由文件 views:存放视图文件或者说模版文件 bin:可执行文件,可以从此启动服务器 ##生成路由 **在app.js中增加路由,在routes下增加路由文件** var articles = require('./routes/article');//引入路由文件 app.use('/articles', articles);//使用此路由中间件 ##修改模板后缀 app.set('views', path.join(__dirname, 'views')); // app.set('view engine', 'ejs');//同时修改模板后缀 app.set('view engine', 'html'); app.engine('html',require('ejs').renderFile); ##添加模板 在views下面新建各个模块的文件夹,然后新建视图模板 ##安装连接数据库 1. 安装数据库 npm install mongoose --save 2. 设置数据库配置文件(新建/common/config.js) 3. 配置模型(/models/db) - 在db文件夹下创建文件models.js var mongoose = require('mongoose'); var ObjectId = mongoose.Schema.Types.ObjectId; module.exports = { User:{ 设置User的数据模型 username:{type:String,required:true},用户名 password:{type:String,required:true},密码 email:{type:String,required:true},邮箱 avatar:{type:String,required:true}头像 }, Article: { 设置文章的数据模型 user:{type:ObjectId,ref:'User'}, 用户 title: String, 标题 content: String, 内容 createAt:{type: Date, default: Date.now} 创建时间 } } - 在db文件夹下创建文件index.js //此文件负责向外暴露模型,因为Model赋给了global作为属性,那就意味着在程序任何地方都可以调用了 var mongoose = require('mongoose'), Schema = mongoose.Schema, models = require('./models'); mongoose.model('User', new Schema(models.User)); mongoose.model('Article', new Schema(models.Article)); global.Model = function (type) { return mongoose.model(type);; } - 在app.js中添加 require('./models/db'); //导入db模块 ##安装会话支持 npm install express-session --save //session npm install connect-mongo --save //session存数据库 //修改app.js配置session var session = require('express-session'); var MongoStore = require('connect-mongo')(session); // app.use(session({ secret: "blog",//secret 用来防止篡改 cookie key: "session_id",//key 的值为 cookie 的名字 cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//设定 cookie 的生存期,这里我们设置 cookie 的生存期为 30 天 resave:true, saveUninitialized:true, store: new MongoStore({mongooseConnection: mongoose.connection}), })); ##安装false模块 //安装模块(因为依赖session,所以必须先安装session) npm install connect-flash --save //在app.js中引入模块 var flash = require('connect-flash'); app.use(flash()); //绑定到locals app.use(function(req,res,next){ res.locals.error=req.flash('error'); res.locals.success=req.flash('success'); res.locals.session_user=req.session.user; next(); }); //在路由页面可以调用了 req.flash('error','用户名或密码错误!'); return res.redirect('back'); ##设置验证中间件 //新建/models/validate/user.js //**注意使用exports.方法名导出,这样可以导出好多方法 exports.checkLogin=function(req,res,next){ if(req.session.user==''){ req.flash('error','请先登录!'); return res.redirect('/users/login'); } next(); }; //在路由中使用中间件 var v_user=require('../models/validate/user'); //获取文章提交页面*validate_user.checkLogin router.get('/add',v_user.checkLogin,function(req, res, next) { res.render('articles/add',{}); }); ##发表文章 - 设置可以上传图片 npm install multer --save //form的类型改为 enctype="multipart/form-data" //增加一个字段