360星计划-node.js的web开发

1、http模块

const http = require('http');
const server = http.createServer((req, res) => {
  res.end('Hello World');
});
server.listen(3000);

使用http模块来进行web开发

http.createServer:
- req表示用户请求体
- res表示请求响应体
- 
使用server.listen方法进行监听

2、koa模块

const Koa = require('koa');
const app = new Koa();

// response
app.use(ctx => {
  ctx.body = 'Hello Koa';
});

app.listen(3000);

koa独有use方法会对中间件进行挂载
//koa的部分源码

module.exports = class Application extends Emitter {
  ...
  
  listen() {
    debug('listen');
    const server = http.createServer(this.callback());
    return server.listen.apply(server, arguments);
  }

  use(fn) {
    this.middleware.push(fn);
    return this;
  }//将fn挂载到middleware
  
  callback() {
    const fn = compose(this.middleware);
    
    if (!this.listeners('error').length) this.on('error', this.onerror);

    const handleRequest = (req, res) => {
      res.statusCode = 404;
      const ctx = this.createContext(req, res);
      const onerror = err => ctx.onerror(err);
      const handleResponse = () => respond(ctx);
      onFinished(res, onerror);
      return fn(ctx).then(handleResponse).catch(onerror);
    };

    return handleRequest;
  }
  //createContest方法挂载request和response
  createContext(req, res) {
    const context = Object.create(this.context);
    const request = context.request = Object.create(this.request);
    const response = context.response = Object.create(this.response);
    context.app = request.app = response.app = this;
    context.req = request.req = response.req = req;
    context.res = request.res = response.res = res;
    request.ctx = response.ctx = context;
    request.response = response;
    response.request = request;
    context.originalUrl = request.originalUrl = req.url;
    context.cookies = new Cookies(req, res, {
      keys: this.keys,
      secure: request.secure
    });
    request.ip = request.ips[0] || req.socket.remoteAddress || '';
    context.accept = request.accept = accepts(req);
    context.state = {};
    return context;
  }
}

koa缺少:

  • 逻辑分层
  • 路由处理
  • 数据解析、校验
  • 权限校验
  • Session、Cache
  • 数据库、Redis
  • 安全

缺点:

  • Koa 无规范约束,不利于团队开发
  • 中间件繁多,质量参差不齐,选择困难

3、THINKJS

安装:npm install -g think-cli
thinkjs
优势:做了企业级目录式的规划

  • src目录存放项目源码
    • bootstrap目录存放用户启动执行脚本
    • config目录存放项目配置文件
      • adapter存放数据库、日志等配置
    • controller存放访问路由逻辑
    • logic存放用户参数校验、权限校验逻辑
    • model存放项目会使用到的数据库操作
  • view存放项目的模板文件
  • www存放项目的静态资源
  • development.js:项目开发环境的启动文件
  • production.js:项目生产环境的启动文件
// src/controller/index.js
export default class extends think.Controller {
  indexAction() {
    return this.display();
  }
}

// view/index_index.html
<h3>Hello World</h3>

模块
解决了目录规范的统一以及模块的统一。

4、TODO项目

5、node.js调试

  • 日志调试
  • 断点调试
    • node --inspect
    • vscode
    • ndb

NodeJS 6.3+ 使用 node --inspect 参数启动可以在 Chrome 浏览器中调试,在 chrome://inspect 中可以发现你的项目并启动 devtool

6、node开发角色转换

  1. 前端
  • 跟浏览器打交道,兼容性问题
  • 组件化
  • 加载速度、JS 执行性能、渲染性能
  • 错误监控
  • XSS、CSRF 等安全漏洞
  1. 服务端
  • 数据库、Redis 等周边服务
  • 性能、内存泄露、CPU、机器管理
  • 服务监控、错误监控、流量监控、报警
  • SQL注入、目录遍历等安全漏洞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值