目录
- 创建第一个Node.js应用
- Node.js处理get,post请求
- Node.js初始化路由及接口开发
- Node.js之增删改查和跨域问题
创建第一个Node.js应用
在我们创建Node.js第一个"Hello, World!"应用前,让我们先了解下Node.js应用是由哪几部分组成的: 引入required模块:我们可以使用require指令来载入Node.js模块。 创建服务器:服务器可以监听客户端的请求,类似于Apache 、Nginx等HTTP服务器。 接收请求与响应请求:服务器很容易创建,客户端可以使用浏览器或终端发送HTTP请求,服务器接收请求后返回响应数据。
- 步骤一、引入required模块 我们使用require指令来载入http模块,并将实例化的HTTP赋值给变量http,实例如下:
var http=require("http");
- 创建服务器 接下来我们使用http.createServer()方法创建服务器,并使用listen方法绑定8888端口。 函数通过request, response参数来接收和响应数据。
实例如下,在你项目的根目录下创建一个叫server.js的文件,并写入以下代码:
http.createServer(
function (request,response){
// 发送HTTP头部
// HTTP状态值:200:OK
// 内容类型:text/plain
response.writeHead(200,{"Content-Type":"text/plain"});
//发送响应数据"Hello World!"
response.end("Hello World!\n");
}
).listen(8888);
// 终端打印如下信息
console.log("Server running at http://127.0.0.1:8888/");
以上代码我们完成了一个可以工作的HTTP服务器。
- 使用node命令执行以上的代码:
node server.js
# Server running at http://127.0.0.1:8888/
接下来,打开浏览器访问http://127.0.0.1:8888/你会看到一个写着"Hello World"的网页。
Node.js处理get,post请求
用req.method判断请求方式
const http = require("http");
const url = require("url");
const server = http.createServer((req, res) => {
//判断get还是post请求
if (req.method == "GET") {
let getData = url.parse(req.url, true).query;
// console.log(getData);
res.end(JSON.stringify(getData));
} else if (req.method == "POST") {
let postData = "";
req.on("data", chunck => {
postData += chunck;
})
req.on("end", () => {
// console.log(postData);
})
res.end(JSON.stringify({
data: "请求成功!",
code: 0
}))
}
})
server.listen(3000, () => {
console.log("监听了3000端口...");
})
Node.js初始化路由及接口开发
url.parse(req.url,true).pathname
server.js
const http=require("http")
const url=require("url")
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){
// 解析为json数据
res.end(JSON.stringify(resultData))
}else{
// 可以设置404页面为html
res.writeHead(200,{"content-type":"text/html"})
res.end("404 not found")
}
})
server.listen(3000,()=>{
console.log("监听3000端口...")
})
路由文件.js
const url = require("url")
function handleRequest(req, res) {
const urlObj = url.parse(req.url, true);
// 判断接口及请求类型
if (urlObj.pathname == "/api/getData" && req.method == "GET") {
return {
msg: "获取成功"
}
} else if (urlObj.pathname == "/api/getPostData" && req.method == "POST") {
return {
msg: "获取成功"
}
}
}
module.exports = handleRequest;
注意中文乱码问题,以及404页面自定义
// 中文乱码
res.writeHead(200,{"content-type":"application/json;charset=UTF-8"})
// 可以设置404页面为html
res.writeHead(200,{"content-type":"text/html"})
res.end("404 not found")
Node.js之增删改查和跨域问题
增删改查
server.js
const http = require("http")
const url = require("url")
const routerModal = require("../router/index")
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.stringify(postData))
})
})
}
const server = http.createServer((req, res) => {
// 中文乱码
res.writeHead(200, { "content-type": "application/json;charset=UTF-8" })
getPostData(req).then((data) => {
req.body=data;
//调用路由的函数
let resultData = routerModal(req, res);
if (resultData) {
// 解析为json数据
res.end(JSON.stringify(resultData))
} else {
// 可以设置404页面为html
res.writeHead(200, { "content-type": "text/html" })
res.end("404 not found")
}
})
})
server.listen(3000, () => {
console.log("监听3000端口...")
})
router.js
const url = require("url")
const { getUser, addUser, deleteUser, updateUser } = require("../controller/user.js")
function handleRequest(req, res) {
const urlObj = url.parse(req.url, true);
console.log(urlObj);
if (urlObj.pathname == "/api/getUser" && req.method == "GET") {
let resultData = getUser();
return resultData;
} else if (urlObj.pathname == "/api/addUser" && req.method == "POST") {
let resultData = addUser(req.body);
return resultData;
} else if (urlObj.pathname == "/api/deleteUser" && req.method == "POST") {
let resultData = deleteUser(urlObj.query.id);
return resultData;
} else if (urlObj.pathname == "/api/updateUser" && req.method == "POST") {
let resultData = updateUser(urlObj.query.id,req.body);
return resultData;
}
}
module.exports = handleRequest;
controller.js
module.exports={
getUser(){
return[
{
id:1,
name:"steven",
age:24
}
]
},
addUser(userObj){
console.log(userObj);
return{
code:0,
msg:"添加成功",
data:null
}
},
deleteUser(id){
console.log(id);
return{
code:0,
msg:"删除成功",
data:null
}
},
updateUser(id,userObj){
console.log(id,userObj);
return{
code:0,
msg:"更新成功",
data:null
}
}
}
跨域问题
浏览器同源策略:协议+域名+端口三者相同任一不同就是跨域
// 设置允许跨域的域名,*代表任意域名允许
res.setHeader("Access-Control-Allow-Origin","*");
注意:正式服务器不要用"*",应该用数组形式,否者接口共享
- 安装中间件(express-generator)
npm install cors -S
- 引入
const cors=require('cors')
app.use(cors())