项目的创建组织管理
项目的初始化、文件结构和模块管理
项目的文件结构
- MVC模式
- M:model
- V:version
- C:control
- 前后端代码分离
文件结构
- 水平文件结构
- 垂直文件结构
- 按功能结构
项目的初始化
模块化
高内聚低耦合
遵照MVC模式
使用moudle.exports
//xxx.js
module.exports={
sum:function(){
var result-0;
for(var i in arguments[i])
if(!isNaN(arguments[i]))
result+=parseFloat(arguments[i])
}
return result;
}
在另一个文件中
var clac =require('./xxx.js')
calc.sum(32,321,3231)
后端项目的实践
npm初始化
npm init
系统名
系统版本
系统描述
入口文件 bin/www
xx
xx
密码
作者
yes
创立文件夹结构
需要安装express和bodyParser
需要放置在package.json作为依赖项
- bin(入口文件夹)
- www(无后缀名)
- app(后端文件夹)
- module_exports(模块文件夹)
- config
- config.js
- app.js
- package.js
- env(配置文件夹)
- development.js
- express.js
//developments.js
//端口号文件
moudle.exports={
port:7101
}
//config.js
var config=null;
//process全局变量查询
if(process && process.env(楼上的文件夹名) && pocess.env.NODE_ENV(自己随便设置,创造的变量){
config=require('./env/'+pricess.env.NODE_ENV+'./js')
}else{
config=require('./env/develoment.js')
}
module.exports=config
//express.js
var express=require('express');
var bodyParser=require('body-parser');//使用中间件
module.exports=function(){
console.log('init express');
var app=express();
app.use(bodyParser.json())//解析post值的数据,使用中间件
//请求了不存在资源,返回404
app.use(function(req,res,next){
res.status(404);
try{
return res.json('not Found');
}catch(e){
console.error('404 set header afeter sent');
}
})
//错误
app.use(function(err,req,res,next){
if(!err){return next()}
res.status(500);
try{
return res.json(err.message||'sever error');
}catch(e){
console.error('500 set header afeter sent');
}
})
return app;
}
//app.js
var express =require('./config/express');
var app=express();
module.exports=app;
//www 入口文件
//设置解释执行器 设置node执行
#!/usr/bin/env node(路径名)
var app=require('../app');
var config=require('../config/config.js');
app.listen(config.port,function(){
console.log('server is running');
})
简单的CMS
实现简单的CMS系统的后端API
- bin(入口文件夹)
- www(无后缀名)
- app(后端文件夹)
- controllers(文件夹)
- news.sever.controllers.js
- models
- news.sever.model.js(新闻相关后端的模型)
- routes
- news.sever.routes.js
- controllers(文件夹)
- module_exports(模块文件夹)
- config
- config.js
- app.js
- package.js
- env(配置文件夹)
- development.js
- express.js
- mongoose.js
//news.server.model.js
var mongoose=require('mongoose');
var NewSchema=new mongoose.Schema({
title:String,
content:String,
createTime:{type:Date,defult:Date.now}
});
var News=mongoose.model('News',NewSchema);
//developments.js
//端口号文件
moudle.exports={
port:7101,
mongodb:'mongodb://localhost/数据库名'
}
//mongoose.js
var mongoose=require('mongoose');
var config=require('./config');
module.exports=function(){
var db=mongoose.connect(config.mongodb);
require('../app/models/news.sever.model')
return db;
};
//app.js
var express =require('./config/express');
var mongodb=require('./config/mongoose');
var db=mongodb();
var app=express();
module.exports=app;
//new.server.controller.js
var mongoose=require('mongoose');
var News=mongoose.model('News');
module.exports={
//创建新闻
creat:function(req,res,next){
var new =new News(req.body);
news.save(function(err){
if(err) return next(err);
return res.json(news);
})
},
//翻页
list:function(req,res,next){
var pagesize =parseInt(req.query.pagesize,10)||10;
//如果没有页数,就从第一页
var pagestart=parseInt(req.query.pagestart,10)||1;
//翻到指定页数
News
.find()
.skip((pagestart-1)+pagesize)
.limit(pagesize)
.exec(function(err,docs){
if(err) return next(err);
return res.json(docs);
});
},
getByid:function(req,res,next,id){
if(!id) return next(new Error('News not Found'));
News
.findOne({_id:id})
.exec(function(err,doc){
if(err) return next(err);
if(doc) return next(new Error('News not Found'));
req.news=doc;
return next();
});
},
get:function(req,rex,next){
return res.json(req.news);
}
};
//news.sever.routes.js
var NewsController=require('../controllers/news.server.controller');
module.exports=function(app){
app.route('./news')
.get(Newscontrollers.list)
.post(Newscontrollers.creat);
app.route('./news/:nid'(页面详情))
.get(Newscontrollers.get)
app.param('nid',NewsController.getByid);
}
//express.js
var express=require('express');
var bodyParser=require('body-parser');//使用中间件
module.exports=function(){
console.log('init express');
var app=express();
app.use(bodyParser.json())//解析post值的数据,使用中间件
//导入路由
require('../app/routes/news.server.routes')(app);
//请求了不存在资源,返回404
app.use(function(req,res,next){
res.status(404);
try{
return res.json('not Found');
}catch(e){
console.error('404 set header afeter sent');
}
})
//错误
app.use(function(err,req,res,next){
if(!err){return next()}
res.status(500);
try{
return res.json(err.message||'sever error');
}catch(e){
console.error('500 set header afeter sent');
}
})
return app;
}