#NodeJS# NodeJs核心模块api路由与接口

如何处理理客户端get/post请求

  • url.parse(urlString[, parseQueryString[, slashesDenoteHost]])
    • urlString url字符串串
    • parseQueryString 是否解析
    • slashesDenoteHost
      • 默认为false,//foo/bar 形式的字符串串将被解释成 { pathname: ‘//foo/bar’ }
      • 如果设置成true,//foo/bar 形式的字符串串将被解释成 { host: ‘foo’, pathname: ‘/bar’ }
console.log(url.parse('https://api.xdclass.net/pub/api/v1/web/product/find
_list_by_type?type=2',true,true))
  • get请求⽤用于客户端向服务端获取数据,post请求是客户端传递数据给服务端
  • 处理理get请求
const url = require('url');
const http = require('http');
//
console.log(url.parse('https://api.xdclass.net/pub/api/v1/web/product/find
_list_by_type?type=2',true,true))
const server = http.createServer((req,res) => {
let urlObj = url.parse(req.url,true);
res.end(JSON.stringify(urlObj.query))
})
server.listen(3000,()=>{
console.log('监听3000端⼝口')
})
  • 处理理post请求
const url = require('url');
const http = require('http');
//
console.log(url.parse('https://api.xdclass.net/pub/api/v1/web/product/find
_list_by_type?type=2',true,true))
const server = http.createServer((req,res) => {
let postData = '';
req.on('data',chunk => {
postData += chunk;
})
req.on('end',()=>{
console.log(postData)
})
res.end(JSON.stringify({
data:'请求成功',
code:0
}))
})
  • 整合get/post请求
const url = require('url');
const http = require('http');
//
console.log(url.parse('https://api.xdclass.net/pub/api/v1/web/product/find
_list_by_type?type=2',true,true))
const server = http.createServer((req, res) => {
if (req.method === 'GET') {
let urlObj = url.parse(req.url, true);
res.end(JSON.stringify(urlObj.query))
} else if (req.method === 'POST') {
let postData = '';
req.on('data', chunk => {
postData += chunk;
})
req.on('end', () => {
console.log(postData)
})
res.end(JSON.stringify({
data: '请求成功',
code: 0
}))
}
})
server.listen(3000, () => {
console.log('监听3000端⼝口')
})

nodemon自动重启工具安装配置

  • nodemon安装
npm install -g nodemon
  • 替换淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org

如何开发一个接口以及路路由编写

  • 通过pathname判断请求地址
//server.js 服务器器⽂文件
const http = require('http');
const routerModal = require('./router/index')
const server = http.createServer((req,res)=>{
res.writeHead(200,{'content-type':'application/json;charset=UTF-8'})
let resultData = routerModal(req,res);
if(resultData){
res.end(JSON.stringify(resultData))
}else{
res.writeHead(404,{'content-type':'text/html'})
res.end('404 not found')
}
})
server.listen(3000,() => {
console.log('监听3000端⼝口')
})
//router/index.js 路路由⽂文件
const url = require('url')
function handleRequest(req,res) {
let urlObj = url.parse(req.url,true);
console.log(urlObj)
if(urlObj.pathname === '/api/getMsg'&&req.method === 'GET'){
return {
msg:'获取成功'
}
}
if(urlObj.pathname === '/api/updateData'&&req.method === 'POST'){
return {
msg:'更更新成功'
第4集 案例例实战⽤用户列列表增删改查
简介:讲解⽤用户列列表增删改查接⼝口开发
使⽤用promise处理理post请求
}
}
}
module.exports = handleRequest

案例例实战用户列列表增删改查

  • 使用promise处理理post请求
const getPostData = (req) => {
return new Promise((resolve, reject) => {
if (req.method !== 'POST') {
resolve({})
return
}
let postData = '';
req.on('data', chunk => {
postData += chunk;
})
req.on('end', () => {
console.log(postData)
resolve(JSON.parse(postData))
})
})
}
const server = http.createServer((req, res) => {
res.writeHead(200, { 'content-type': 'application/json;charset=UTF-8' })
//获取post请求数据
getPostData(req).then((data) => {
req.body = data
let resultData = routerModal(req, res);
if (resultData) {
res.end(JSON.stringify(resultData))
} else {
res.writeHead(404, { 'content-type': 'text/html' })
res.end('404 not found')
}
})
})
  • 处理理数据的文件controller/user.js
module.exports = {
getUserList(){
return [
{
id:1,
name:'eric',
city:'北北京'
},
{
id:2,
name:'xiaoming',
city:'⼴广州'
},
{
id:3,
name:'⼩小红',
city:'上海海'
}
]
},
addUser(userObj){
console.log(userObj);
return {
code:0,
msg:'新增成功',
data:null
}
},
delectUser(id){
console.log(id)
return {
code:0,
msg:'删除成功',
data:null
}
},
updateUser(id,userObj){
console.log(id,userObj);
return {
code:0,
msg:'更更新成功',
data:null
}
}
}
  • 路由编写文件
const url = require('url')
const {getUserList,addUser,delectUser,updateUser} =
require('../controller/user')
function handleRequest(req,res) {
let urlObj = url.parse(req.url,true);
console.log(urlObj)
if(urlObj.pathname === '/api/getUserList'&&req.method === 'GET'){
let resultData = getUserList()
console.log(resultData)
return resultData;
}
if(urlObj.pathname === '/api/addUser'&&req.method === 'POST'){
let resultData = addUser(req.body);
return resultData;
}
if(urlObj.pathname === '/api/delectUser'&&req.method === 'POST'){
let resultData = delectUser(urlObj.query.id);
return resultData;
}
if(urlObj.pathname === '/api/updateUser'&&req.method === 'POST'){
let resultData = updateUser(urlObj.query.id,req.body);
return resultData;
}
}
module.exports = handleRequest

study458

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章