很多java同学对于JavaScript的理解,可能还停留在html页面上写几个jquery请求的程度,殊不知在Node.js的加持下,JavaScript早已超越,甚至干起了java的活儿,做起了微服务。珍珠港已被偷袭,后端同学们赶紧把node.js学起来吧!
web框架指的是处理http的服务端框架(https一般由nginx去处理,代码框架不需要管),可以分三个层次。
- http模块,Node.js 提供了 http模块用于处理基础服务,这是 web 框架的基础。优点是足够轻,缺点是常用功能几乎都需要自己再实现一遍,比如输出json格式,输入静态网页等。
// server.js
const http = require('http');
const server = http.createServer((req, res) => {
// 获取 url 里面的get请求参数,是不是感觉比较麻烦?
const queryObject = url.parse(req.url,true).query;
console.log(queryObject);
// 获取请求类型 get, post, put , delete 等
console.log(req.method)
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('okay');
});
server.listen(8080, '127.0.0.1');
//执行 node server.js 就行
- express、koa、fastify等轻量级web应用框架,保持最小规模的灵活性,对常用http功能都进行了封装。优点是足够轻,足够干净,几乎没有多余的东西,缺点是如果你想搞mvc等框架类的东西,不提供指导,得自己来,甚至express-generate脚手架也没有mvc。
// server2.js
var express = require('express');
var app = express();
app.use(express.json());
app.post('/login', function(req, res) {
console.log(req.query) // get 请求参数获取
console.log(req.params) // post 表单
console.log(req.body) // post json
// todo 业务逻辑
res.send({status:0, msg:'登录成功', data:{}})
})
app.listen(8000, async function () {
console.log('Express server running at http://127.0.0.1:8000')
})
//执行 node server2.js 就行
- nestjs,eggjs,think等企业级web框架,完整的mvc,几乎完全类似于spring的代码体验,这是赤裸裸的抢java的人啊,优点是上手时候的熟悉感,代码有明显的 Controller、Service、Model、View 的划分,有利于组织代码规范。
缺点呢,等做了几天开发,就发现好像完全丢失了js的灵活感,怪不得expres压根就不打算搞mvc。
这就是 使用node.js所需web 框架的 3 个层次,理清了它们的关系和适用场景,再去学习就简单了。下面补充一个测试脚本
// test.js
const axios = require('axios');
// get请求
axios.get('http://localhost:3000/test')
.then(res => {
console.log(res.data);
})
.catch(error => {
console.log(error);
});
// post请求
axios.post('http://localhost:3000/test',
{username:'a3', password:'11'})
.then(res => {
console.log(res.data);
})
.catch(error => {
console.log(error);
});
// 执行 node test.js就可以看web应用有没有正常启动了。
总结:
1, http模块要了解,然后使用express等轻量框架。
2, 个人开发,或者独立的微服务,建议express就够了,灵活简单够轻。如果需要mvc自己搭建就行。
3, 团队合作,建议nestjs,midway等,毕竟代码规范优先级最高,完全spring的风格,也有利于其他后端人员加入。