Node.js概览
node.js并不是一个新的编程语言,也不是一个JavaScript库,而是一个JavaScript运行环境,也是JavaScript在浏览器以外的第二个运行环境。我们可以在node.js上运行ES6的所有功能,而不用担心有任何的兼容性问题。node.js除了对ES6的支持性良好以外,还提供了一些浏览器所不具备的功能,例如文件操作和网络操作功能,而这些功能使node.js具备了Web服务器的开发能力。
如何使用node.js
node.js官方网站:https://nodejs.org/en
node.js作为一个JavaScript运行环境,它是可以执行JS代码的,但是不能运行HTML和CSS代码,HTML和CSS还是需要在浏览器中才可以执行的。
在vscode终端执行node 文件名.js即可执行文件
但如果文件内容有变更,需要保存后再重新通过node命令来做执行,如果希望在文件修改后,可以自动在控制台中进行执行的话,我们可以使用node的一个插件叫做nodemon,可以使用node.js的包管理工具NPM来进行安装。
然后在执行nodemon 文件名.js,每次修改代码他都会自动帮我们进行重新执行。
搭建Web服务器
搭建Web服务器可以使用node.js内置的HTTP模块,然后调用http.createServer()创建一个web服务器实例。
server.listen设置服务器实例监听哪个端口。
const http = require('http')
const server=http.createServer((req,res)=>{
res.end('Hello Node!')
})
server.listen(3000,()=>{
console.log('Server is running');
})
接口请求处理(GET)
判断请求方式
const http = require('http')
const server=http.createServer((req,res)=>{
if (req.method === 'GET') {
res.end('GET请求')
}else if (req.method === 'POST') {
res.end('POST请求')
}
})
server.listen(3000,()=>{
console.log('Server is running');
})
解决乱码问题
const http = require('http')
const server=http.createServer((req,res)=>{
if (req.method === 'GET') {
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('GET请求')
}else if (req.method === 'POST') {
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('POST请求')
}
})
server.listen(3000,()=>{
console.log('Server is running');
})
判断接口地址
pathname
const http = require('http')
const url = require('url')
const server=http.createServer((req,res)=>{
const {pathname}=url.parse(req.url)
if (req.method === 'GET' && pathname === '/getInfo') {
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('响应了getInfo接口的请求')
}else if (req.method === 'POST') {
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('POST请求')
}else{
res.statusCode = 404
res.end('Not Found')
}
})
server.listen(3000,()=>{
console.log('Server is running');
})
参数
const http = require('http')
const url = require('url')
const server=http.createServer((req,res)=>{
const {pathname,query}=url.parse(req.url)
if (req.method === 'GET' && pathname === '/getInfo') {
console.log(query);
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('响应了getInfo接口的请求')
}else if (req.method === 'POST') {
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('POST请求')
}else{
res.statusCode = 404
res.end('Not Found')
}
})
server.listen(3000,()=>{
console.log('Server is running');
})
请求参数格式转换
将urlencoded格式转换成JavaScript对象,就可以使用node.js的内置模块querystring。
const http = require('http')
const url = require('url')
const qs = require('querystring')
const server=http.createServer((req,res)=>{
const {pathname,query}=url.parse(req.url)
if (req.method === 'GET' && pathname === '/getInfo') {
console.log(query);
console.log(qs.parse(query));
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('响应了getInfo接口的请求')
}else if (req.method === 'POST') {
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('POST请求')
}else{
res.statusCode = 404
res.end('Not Found')
}
})
server.listen(3000,()=>{
console.log('Server is running');
})
post请求处理
post与get不同,get请求参数是拼接路径,而post的请求参数是放在请求体中,可传递的请求参数的种类更丰富,体积也更大。
const http = require('http')
const url = require('url')
const qs = require('querystring')
const server=http.createServer((req,res)=>{
const {pathname,query}=url.parse(req.url)
if (req.method === 'GET' && pathname === '/getInfo') {
console.log(query);
console.log(qs.parse(query).a);
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('响应了getInfo接口的请求')
}else if (req.method === 'POST' && pathname === '/postInfo') {
let data=''
req.on('data',temp=>{
data += temp
})
req.on('end',()=>{
console.log( qs.parse(data));
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('POST请求')
})
}else{
res.statusCode = 404
res.end('Not Found')
}
})
server.listen(3000,()=>{
console.log('Server is running');
})