node:node是js在后端的一个运行时环境
express: 是基于node的框架,能够快速构建web应用
一、安装
- 安装node,去官网下载,安装node长期稳定版本
- 新建项目工程文件夹
cnpm init -y 创建package.json文件
cnpm i -S express 安装express模块
cnpm i -S express body-parser 安装bodyParser,bodyParser中间件用来解析http请求体
二、引入
import logger from "../app/utils/logger";
import fs from 'fs' //node 提供的
import express from 'express'
import bodyParser from 'body-parser'
import util from 'util'
import path from 'path'
var app = express();
//配置bodyParser
app.use(bodyParser.json()); //用来解析前端发的json数据
app.use(bodyParser.urlencoded({extend:true})) //用来解析前端发的表单数据
三、跨域
app.use(function(req,res,next){
//http请求的来源
res.setHeader('Access-Control-Allow-Orgin','*');
//http请求的方法
res.setHeader('Access-Control-Allow-Methods', '*');
//http请求的头
res.setHeader('Access-Control-Allow-Headers','*');
next();
})
四、定义接口
app.get("/",function(req,res){
res.send('hello world')
})
app.get("/json",function(){
var obj = {name:"star"}
res.send(obj)
})
五、路由
import express from 'express'
const router = express.Router();
import userCtrl from '../controllers/user.ctrl'
export default function(app){
router.route('/user/login').get(userCtrl.login);
//使用上面的路由 api是一个前缀 给所有路由添加前缀
app.use('/',router);
}
六、控制器
业务逻辑
const userCtrl = {
login:function(req,resp){
resp.json({code:200,msg:'登录成功'})
}
}
七、日志
//动态加载路由 要找到routes 目录下所有文件 动态加载
var currentDir = process.cwd();
logger.info("currentDir:"+currentDir)
var routeDir = currentDir + '/app/routes';
// 同步读取目录下文件
fs.readdirSync(routeDir).forEach(file=>{
// 合并路径
var filePath = path.join(routeDir,file);
logger.info("filePath:" + filePath)
// 加载并执行
require(filePath)(app);
})
// 日志输出级别: info warn error
const logger = createLogger({
level: 'info',
format:format.combine(
myFormat
),
transports:[ //输出日志的地方
new transports.Console(),
new transports.File({filename:'./logs/applog.log'})
]
})