最近终于有时间静下心来学学node
相关的知识了,那么来做一个什么东西呢?想来想去还是来做一个简单的bolg吧~~。接下来就介绍一下具体的历程。
技术栈
- node
- express(web应用框架)
- mongoose(数据库)
- pm2(应用进程管理)
- swagger(API功能调试)
项目介绍
本文章将用具体的项来介绍 node-app:
文件结构
- app.js:入口文件
- package.json:工程信息及包管理
- node_moudules:依赖模块
- public:静态资源(css、js、images)
- routes:路由管理
- view:模版文件
- models:数据模型
- config:项目配置文件
- app:存放控制器、公用方法等
- bin:项目配置脚本
MVC模式
- Model
node
提供的模块,中间件,在用express
创建项目时,产生node_modules
即表示M
层- 模块如
ejs
,mongoose
,morgan
,body-parser
等等
- View
express
生成项目时会产生views
,即前端
- Controller
- 即视图向控制器发出请求,由控制器选择相应的模型来处理
- 模型返回的结果给控制器,由控制器来选择合适的视图,生成界面给用户
- 如通过
res.render
来渲染ejs
文件
路由
- 意义 : 访问主页时调用
ejs
模板引擎渲染index.ejs
文件 - 实现方法 :
- 在
app.js
中写入require('./routes/index')(app)
即可引入; - 路由中在引入对应的
Controller
来实现具体数据的展示app.get('/articles/:id', articles.getArticle);
- 在
Controller
主要来处理业务逻辑,也就是说数据该怎么展示由他来管理,具体实现如下:
function (req, res) { blogdbs.find({ _id: req.params.id //查询条件 }, function (err, data) { if (err) { //err } else { res.render('articles', { ... //数据对象 }); } })}复制代码
Model
说Model
前先说说Schema
,那么Schema
是什么呢?它类似于关系数据库的表结构。具体实现如下:
var mongoose = require('mongoose');var schema = mongoose.Schema;var _blogSchema = new Schema({ title: { type: 'String' }, ...});复制代码
接下来就可以创建Model
了,格式是mongoose.model(modelName, schema);
有Schema
后为什么还要有Model
呢?
在Mongoose
的设计理念中,Schema
用来也只定义数据结构,具体对数据的增删改查操作都由Model
来执行。
就好比富士康用模具组装出一台手机后,当需要打电话时是用手机来打而不是用模具。
遇到的问题
- node开发过程中需要频繁的重启项目,后来学习解了
pm2
来管理进程,并可监控node
服务端的更新,不用再重启服务了,开发效率大大提高。 - 在服务端异步提交数据时候,
app.js
中需要加入以下代码,并且需要在路由引入的上方。app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended: false}));复制代码
app.get()
,app.use()
和app.all()
- app.use(path,callback)中的callback既可以是router对象又可以是函数
- app.get(path,callback)中的callback只能是函数,可以将 app.get() 看做 app.use() 的请求 get 方式的简要写法。
- app.all() 附加到应用程序的路由,所以使用 app.router 中间件负责处理所有的路由请求,如:GET、POST等;
var express = require('express');var app = express();app.get('/hello',function(req,res,next){ res.send('hello test2');});//等同于:var express = require('express');var app = express();var router = express.Router();router.get('/', function(req, res, next) { res.send('hello world!');});app.use('/hello',router);复制代码
如果您觉得阅读本文对您有帮助,请“Star”,您的“Star”将是我最大的写作动力!
项目地址: