Node-easy-notes-app
代码下载链接https://github.com/zouwt189/node-easy-notes-app
1.程序框架结构
-
server.js
是程序的主入口 -
./config/database.config.js
包含mongo的URL -
./app/routes/note/route.js
包含路由 -
./app/models/note.models.js
包含note的数据结构 -
./app/controllers/note.controllers.js
包含操作函数,类似于go语言的handler
2.server.js
- require包express、body-parser、mongoose
- 连接mongo
mongoose.Promise = global.Promise;
mongoose.connect(dbConfig.url)
.then(() => {
console.log('successfully connected to the database');
}).catch(err => {
console.log('could not connect to the database. Exiting now ...');
process.exit();
});
- 监听端口
app.listen(3000, () =>{
console.log('server is listening at port 3000');
});
- 箭头函数。
()=>{}
表示function(){}
、res=>
表示function(res){}
、(req,res)=>{}
表示function(req,res){}
3.note.route.js
- require
note.controllers.js
,其中包含了类似handler的处理函数 - 模块输出
module.exports = (app) =>{
const notes = require ('../controllers/note.controllers');
app.post('/notes', notes.create);
...
}
- 模块调用
const app = express();
require('./app/routes/note.routes')(app);//app作为参数传递给匿名函数
4.node.models.js
- 定义notes数据结构,为mongo模式
const mongoose = require('mongoose');
const NoteSchema = mongoose.Schema({
title: String,
content: String
},{
timestamps: true
});
- 输出为mongo模型
module.exports = mongoose.model('Note', NoteSchema);
-
note.controllers.js
调用方法
const Note = require('../models/note.models');
5.note.controllers.js
- 控制函数和路由相对应,包含
create
、findAll
、findOne
、update
、delete
exports.create = (req, res) => {}
- note可以使用mongoose自带函数
save()
、find()
、findById()
、findByIdAndUpdate
、findByIdAndRemove
- catch函数处理错误,then函数继续执行
exports.findOne = (req, res) =>{
Note.findById(req.params.noteId)
.then(note => {
if (!note) {
return res.status(404).send({
message: "Note not found with id "+ req.params.noteId
});
}
res.send(note)
}).catch(err => {
if (err.kind === 'objectId') {
return res.status(404).send({
message: "Note not found with id " + req.params.noteId
});
}
return res.status(500).send({
message: "Error retrieving note with id " + req.params.noteId
});
});
};
- node.js的函数语法特点感觉就是通过函数后面加函数不断往下执行下去,因此应当注意变量作用域、变量在当前域的实际值。