#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

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