1 nodejs 启动web 服务
//通过nodemon工具来实现 nodejs服务来实现自动重启服务
2 nodejs 使用基础
- 引入http模块
const http = require('http');
const fs = require('fs');//文件模块
- 调用 http 的 createServer 方法来创建服务实例
const server = http.creatSercer((req,res) => {
//过滤小图标的请求
if(req.url !== '/favicon.ico'){
//过滤请求
if(req.url === '/getName'){
//设置字符串编码使其解码中文
res.writeHead(200,{'content-type':'text/html;charset = utf-8'});
//响应数据
res.write('你好帅啊');
//结束请求
res.end();
}else if(req.url === '/index.html'){
//通过 fs.readFile() 来读取文件内容
fs.readFile('./views/index.html',(error,data) => {//error读取失败 data读取到的内容
if(error){
res.write('error');
res.end()
}else{
res.write(data);
res.end();
}
})
}
}
})
- 调用 server 的 listen 方法来监听端口号
server.listen(8080);
对路径设置
- 在访问完html文件的时候,有引入路径的话会发出请求需要去获取文件内容再响应出去
const http = require('http');
const fs = require('fs');
//创建服务
const server = http.createServer( (req,res) => {
//过滤掉小图标的请求
if(req.url !== '/favicon.ico'){
console.log(req.url);
if(req.url === '/getName'){
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'})
res.write('小帅哥');
res.end();
}else if(req.url === '/hello'){
//1.通过 fs.readFile()来读取文件内容
fs.readFile('./views/index.html',(error,data) => {
if(error){
//获取失败执行这里
res.write(error);
res.end();
}else{
res.write(data);
res.end();
}
})
}else if(req.url ==='/style.css'){
//通过fs.readyFileSync()来获取文件内容,这是一个同步方法,没有失败参数,直接返回数据
const data =fs.readFileSync('./views/style.css')
res.write(data);
res.end();
} else if (req.url === '/hero.jpg') {
const data = fs.readFileSync('./views/hero.jpg')
res.write(data)
res.end()
}
}
// res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'})
// res.write('hai你吗还好吗');
// res.end();
});
server.listen(9090);
console.log('服务器已启动'
);
获取请求数据
// 主要提供两个接口
// POST http://localhost:9090/login
// 两个参数:
// username 用户名
// password 密码
// GET http://localhost:9090/search
// 一个参数:
// username 用户名
const http = require('http')
const utils = require('./utils.js')
console.log(utils)
//假数据库
const users = [
{
username: '张三',
password: '123'
},
{
username: '张三风',
password: '123'
},
{
username: '李四',
password: '456'
},
{
username: '王五',
password: '789'
},
{
username: '马六',
password: '000'
}
]
const server = http.createServer((req, res) => {
// 处理跨域问题
res.writeHead(200, {
'Access-Control-Allow-Origin': '*',
'Content-Type': "text/html; charset=utf-8"
})
if (req.url !== '/favicon.ico') {
if (req.url === '/login') {
// 得到前端传递过来的 username 与 password的值
let raw = ''; // 用来接收前端传递过来的参数
req.on('data', (chunk) => {
// 这里事件就是前端请求时请求内容的数据,如果传递的数据很多的话,这个事件会触发多次。每次里面的chunk是这个数据的一小部分
raw += chunk
})
//当数据接收完成的时候会执行下面的监听
req.on('end', () => {
let username = utils.getQuery('username', raw)
let password = utils.getQuery('password', raw)
// 判断当前用户是否在我 users 数组中
let user = users.find(user => {
return user.username === username
})
if (!user) {
res.write('用户名不存在');
res.end()
return
}
// 判断密码是否一致
if (user.password === password) {
res.write('登录成功')
res.end()
} else {
res.write('密码错误')
res.end()
}
})
// res.write('登录处理')
// res.end()
}
//GET请求
//模糊筛选.一个字符串是否在另一个字符串中存在
//这里是判断是否是get请求
if (req.url.indexOf('/search') > -1) {
// 1. 判断前端传递过来的参数username是什么
// 解析url地址
let str = req.url.split('?')[1]
let username = utils.getQuery('username', str)
//filter过滤,满足要求的筛选出来
let arr1 = users.filter(item => {
// return item.username === username
return item.username.indexOf(username) > -1
})
if (!username) {
arr1 = users
}
res.write(JSON.stringify(arr1))
res.end()
}
}
})
server.listen(9090)
console.log('服务启动成功')