美文网首页
学习Node.js- 【1】搭建开发环境

学习Node.js- 【1】搭建开发环境

作者: zzyo96 | 来源:发表于2020-08-18 14:27 被阅读0次

一、nodejs一个简单实例

image.png

二、nodejs处理get请求

get请求,通过querystring来传递数据,如a.html?a=100&b=200 。 浏览器直接访问, 就发送get请求

image.png

三、处理post请求

image.png

——————————————————————————

搭建开发环境

  • 使用nodemon检测文件变化,自动重启node
  • 使用cross-env设置环境变量,兼容mac linux 和 windows

————————————————————

项目搭建主要流程从0到1(个人总结)

代码地址:https://github.com/zzyo96/node_blog

  • 新建一个项目目录为node_blog
    总的目录结构是这样的


    image.png
  • 在bin目录创建www.js 里面写好基本的server,将http.createServer的回调函数进行拆分至根目录下app.js,为了便于管理和维护

image.png
  • app.js, 不关心业务代码,只进行一些请求和响应的基本处理,在这里通过getPostData函数结合promise语法,处理Post请求对数据的获取。具体路由逻辑拆分在./src/router/blog.js中
const querystring = require('querystring');
const handleBlogRouter = require('./src/router/blog.js')
const handleUserRouter = require('./src/router/user.js')

//用于处理 post data
const getPostData = (req)=>{
  return new Promise((resolve,reject)=>{
    if(req.method !== 'POST'){
      resolve({})
      return
    }
    if(req.headers['content-type']!=='application/json'){
      resolve({})
      return
    }
    let postData = ''
    req.on('data',chunk =>{
      postData += chunk.toString();
    })
    req.on('end',()=>{
      if(!postData){
        resolve({})
        return
      }
      resolve(
        JSON.parse(postData)
      )
    })
  })
};

const serverHandle = (req,res) =>{
//  设置返回格式JSON
  res.setHeader('Content-type','application/json')

//  获取path
  const url = req.url;
  req.path = url.split('?')[0]

//  解析query
  req.query = querystring.parse(url.split('?')[1])

//  处理post data
  getPostData(req).then(postData=>{
    req.body = postData;

    //  处理blog路由
    const blogData = handleBlogRouter(req,res)
    if(blogData){
      res.end(
        JSON.stringify(blogData)
      );
      return
    }

//  处理user路由
  const userData = handleUserRouter(req,res);
  if(userData){
    res.end(
      JSON.stringify(userData)
    );
    return
  }

//  未命中路由,返回404
    res.writeHead(404,{"Content-type":"text/plain"});
    res.write("404 Not Found\n");
    res.end();
  })
};

module.exports = serverHandle
  • ./src/router/blog.js 这里不关心具体业务逻辑代码, 只是处理返回的结果,返回的结果通过successmodel和errormodel进行了一次封装
image.png image.png
  • model/resmodel.js 对返回结果进行统一的封装
class BaseModel{
  constructor(data,message){
    if(typeof data === 'string'){
      this.message = data
      data = null
      message =null
    }
    if(data){
      this.data = data
    }
    if(message){
      this.message = message
    }
  }
}

class SuccessModel extends BaseModel{
  constructor(data,message){
    super(data,message)
    this.errno = 0
  }
}

class ErrorModel extends BaseModel{
  constructor (data,message){
    super(data, message);
    this.errno = -1
  }
}

module.exports = {
  SuccessModel,
  ErrorModel
};
  • ./src/controlller/blog.js 这里写具体业务代码返回的数据
image.png
完成, 运行的时候 执行 node ./bin/www.js 即可

相关文章

网友评论

      本文标题:学习Node.js- 【1】搭建开发环境

      本文链接:https://www.haomeiwen.com/subject/gbapdktx.html