首先修改index.html代码
post的js代码:
const url=require(‘url’);
const querystring=require(‘querystring’)
// 引入读文件的模块
const readfile=require(‘readfile’);
let server=http.createServer((req,res)=>{
if(req.url==‘/favicon.ico’) return;
if(req.url.startsWith(‘/form’)){
readfile(__dirname,req,res);
}else if(req.url.startsWith(‘/submit’)){
// post请求发送数据的时候,是一段段发送
// data事件,监听接收的数据
// 一般测试不出来。
var allData=‘’;
req.on(‘data’,(chunk)=>{
allData+=chunk;
})
// end事件 数据接收完的时候执行
req.on(‘end’,()=>{
// allData得到的是k=v&k=v形式的数据 使用querystring转化 querystring.parse()可以把类似k=v&k=v的字符串转化为对象
console.log(querystring.parse(allData));
res.end(用户名是${allData.user}密码是${allData.pass});
})
}else{
res.end(‘404’);
}
})
server.listen(‘8989’)
按步骤运行即可
两个js文件整合起来:
const readfile=require(‘readfile’);
const http=require(‘http’);
const url=require(‘url’);
const querystring=require(‘querystring’)
// 创建服务器
let server=http.createServer((req,res)=>{
if(req.url==‘/favicon.ico’) return;
// 处理get或者post请求
// 如果是post请求的时候,query参数为空
if(req.url.startsWith(‘/form’)){
readfile(__dirname,req,res);
return;
}
if(url.parse(req.url,true).query=={}){
var allData=‘’;
req.on(‘data’,(chunk)=>{
allData+=chunk;
})
// end事件 数据接收完的时候执行
req.on(‘end’,()=>{
// allData得到的是k=v&k=v形式的数据 使用querystring转化 querystring.parse()可以把类似k=v&k=v的字符串转化为对象
console.log(querystring.parse(allData));
res.writeHead(200,{‘Content-type’:‘text/plain;charset=utf-8’});
res.end(用户名是${allData.user}密码是${allData.pass});
})
}else{
let params=url.parse(req.url,true).query;
res.writeHead(200,{‘Content-type’:‘text/plain;charset=utf-8’})
// 发送的数据只能是字符串
res.end(用户名是${params.user}密码是${params.pass});
}
})
// 监听端口号
server.listen(‘8989’);
2、Express 简介
===============================================================================
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。
使用 Express 可以快速地搭建一个完整功能的网站。
Express 框架核心特性:
可以设置中间件来响应 HTTP 请求。
定义了路由表用于执行不同的 HTTP 请求动作。
可以通过向模板传递参数来动态渲染 HTML 页面。
安装 Express 并将其保存到依赖列表中:
cmd命令:
npm install express --S
以上命令会将 Express 框架安装在当前目录的 node_modules 目录中。
实例:静态资源读取
// 第一步:引入框架
const express=require(‘express’);
// 创建服务器
const app=express();
// 读取静态资源 自动去form目录下寻找index.html,呈递给前台。如果没有index.html
//会提示错误
// 路径:除了ip地址和端口号剩下的就是路径
// http://localhost:8989/zsh/dsfsdfsd
// app.use(‘获取的url路径’,express.static(‘读取静态资源路径’))
// 前端要和路径完全匹配,才会执行代码
app.use(‘/’,express.static(‘./www/form/index.html’));
// 如果不是处理静态资源,路径的意思就是以该路径开始即可匹配,不是完全匹配
app.use(‘/zsh’,(req,res)=>{
// 封装完以后,结束响应使用send,执行完以后不会再往下执行,结束响应
res.send(‘404’);
})
console.log(11111);
// 添加监听端口号
app.listen(‘8989’)
读取静态资源–app.get()
JS代码:
const express=require(‘express’);
const app=express();
// 静态资源读取
// /默认 寻找的路径需要是index.html
app.use(‘/’,express.static(‘./www/form’));
// app.get()可以处理get请求
app.get(‘/submit’,(req,res)=>{
// get请求的参数在url内部 req.query获取get请求参数
console.log(req.query);
res.send(您输入的用户名是${req.query.user});
})
app.listen(‘8989’)
cmd运行js;
打开html页面:
读取静态资源–app.post()
JS代码:
const express=require(‘express’);
const app=express();
// post请求需要依赖专门的模块
// 第一步:npm install body-parser -S;
// 第二步:在页面中引入
// 第三步:在post请求的第二个参数加上刚刚解析body-parser得到的参数。
var bodyParser = require(‘body-parser’)
var urlencodedParser = bodyParser.urlencoded({ extended: false })
// 静态资源读取
// /默认 寻找的路径需要是index.html
app.use(‘/’,express.static(‘./www/form’));
// app.post()可以处理post请求
// post请求参数处理比较麻烦,需要依赖一个模块 body-parser
// 具体用法可以参照手册
// post请求的第二个参数需要通过解析body-parser模块得到
app.post(‘/submit’,urlencodedParser,(req,res)=>{
// 获取post请求的参数 req.body
res.send(req.body);
})
app.listen(‘8989’);
按步骤进行即可
两者整合:
const express=require(‘express’);
const app=express();
var bodyParser = require(‘body-parser’)
var urlencodedParser = bodyParser.urlencoded({ extended: false })
app.use(‘/’,express.static(‘./www/form’));
app.post(‘/submit’,urlencodedParser,(req,res)=>{
res.send(req.body);
})
app.get(‘/submit’,(req,res)=>{
console.log(req.query);
res.send(您输入的用户名是${req.query.user});
})
app.listen(‘8989’);
静态资源读取—ajax
先在目录下再创建一个public文件夹
public一般放置的是css 、js文件;
js代码:
const express=require(‘express’);
const app=express();
// 引入处理post参数的模块
var bodyParser = require(‘body-parser’)
var urlencodedParser = bodyParser.urlencoded({ extended: false })
app.use(‘/’,express.static(‘./www/form’));
//把静态资源呈递
app.use(‘/public’,express.static(‘./public’));
app.post(‘/submit’,urlencodedParser,(req,res)=>{
// 获取post请求的参数 req.body
res.send(req.body);
})
app.get(‘/submit’,(req,res)=>{
// get请求的参数在url内部 req.query获取get请求参数
console.log(req.query);
res.send(${req.query.user});
})
app.listen(‘8989’);
index.html:
Document
这是登录页面
按钮
已有账号请注册
ajax:不需要跳转
打开其他页面:
提交get请求,跳转:
post请求:
3、Mongodb数据库
===============================================================================
自己写的相关介绍链接:https://blog.csdn.net/weixin_53037175/article/details/111829602
连接数据库,和后台联系起来:
const express=require(‘express’);
const app=express();
// 引入数据库
var MongoClient = require(‘mongodb’).MongoClient;
// 数据库地址
var url = “mongodb://localhost:27017”;
app.use(‘/zsh’,(req,res)=>{
// 插入数据库
// 连接数据库 把数据库和后台联系起来
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db(“student”);
dbo.collection(“stu1”). find({}).toArray(function(err, result) { // 返回集合中所有数据
if (err) throw err;
console.log(result);
db.close();
res.send(result);
});
});
})
app.use(‘/’,(req,res)=>{
MongoClient.connect(url, function(err,db) {
if (err) throw err;
// 选择数据库
var dbo = db.db(“student”);
var myobj = { name: “菜鸟教程”, url: “www.runoob” };
// 插入数据操作
dbo.collection(“stu1”).insertOne(myobj, function(err, res1) {
if (err) throw err;
db.close();
res.send(‘数据插入成功了’);
});
});
})
app.listen(‘8989’);
4、数据库增删改查操作
==============================================================================
首先是静态资源HTML
index.html
Document
请注册
//addata,提交数据到指定的路径地址,这个根据js的要求修改
封装好的js文件,一般是放在自己创建文件夹里(比如model):
dao.js
//数据库操作
// 先下载好数据库包再引入,这个也可以在php中操作数据库
const MongoClient=require(‘mongodb’).MongoClient;
// 数据库地址,27017是默认是数据库端口号
const url=“mongodb://localhost:27017”;
// 把数据库连接的操作,封装起来。
function _connect(callback){
// 连接上数据库
//连接数据库是异步操作,不知道什么时候连接成功了。用到回调函数的概念
MongoClient.connect(url, function(err, db) {
// 连接数据库成功
if (err) throw err;
// 说明连接数据库成功了 db代表连接成功以后返回的数据
callback(db);
});
}
//插入数据操作:
// module.exports导出数据
module.exports insert=function(databse,type,myobj,callback){
_connect(function(db){
// db连接成功的数据
// db.db(‘操作的数据库’)
var db=db.db(database);
//判断myobj类型,转换为数组作为语句集合插入数据库
if(myobj instanceof Array){
myobj=myobj
}else{
myobj=[myobj]
}
// 一条数据是对象 insertOne 多条数据是数组 用insertmMany
db.collerction(type).insertMany(myobj,function(err,r){
if err throw err;
bd.close();
// r得到的是成功插入数据的信息
callback®;
})
})
}
//查看操作:
// 查询封装的时候,考虑是否需要分页是否需要排序
// 需要书写函数参数的默认值,因为用户有可能不会书写
module.exports.find=function(databse,type,callback,myobj={},mysort={},myskip=0,mylimit=0){
_connect(function(db){
// 查询数据
var dbo = db.db(database);
// sort排序
// skip跳过多少条数据
// limit()限制取数据的数量
dbo.collection(type).find(myobj).sort(mysort).skip(myskip).limit(mylimit).toArray(function(err, result) { // 返回集合中所有数据
if (err) throw err;
console.log(result);
db.close();
callback(result);
})
})
}
//更新操作:
module.exports.update=function(databse,type,myobj,updateObj,callback){
_connect(function(db){
var dbo = db.db(dbname);
var updateStr = {$set: {updateObj}};
// updateOne(查询条件(可以是id也可以是语句),更改后数据)
dbo.collection(col).updateOne(myobj, updateStr, function(err, res) {
if (err) throw err;
console.log(“文档更新成功”);
db.close();
callback(res)
});
})
}
//删除操作:
module.exports.delete=function(database,type,myobj,callback){
_connect(function(db){
var dbo = db.db(dbname);
// updateOne(查询条件,更改的数据)
dbo.collection(col).deleteOne(myobj, function(err,obj) {
if (err) throw err;
db.close();
callback(obj);
});
})
}
编写好封装的js包文件后,写对应的js文件
01.js
const express=require(‘express’);
const app=express();
// md5加密 一般进行多层加密 一般是2-3层
const md5=require(‘md5’);
//引用写好的封装文件,./–表示同级目录
const dao=require(‘./model/dao.js’);
app.use(‘/’,express.static(‘./www/’));
//引用静态资源文件如js,css
app.use(‘/public’,express.static(‘./public/’));
//对应的插入数据代码
app.get(‘/addata’,(req,res)=>{
//前台html发送过来的数据–input的user以及pass
var obj={
proname:req.query.user,
propass:req.query.pass
}
dao.insert(‘product’,‘phone’,obj,function®{
res.send®;
})
})
//删除 自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
前端校招精编面试解析大全点击这里免费获取完整版pdf查看
s’);
app.use(‘/’,express.static(‘./www/’));
//引用静态资源文件如js,css
app.use(‘/public’,express.static(‘./public/’));
//对应的插入数据代码
app.get(‘/addata’,(req,res)=>{
//前台html发送过来的数据–input的user以及pass
var obj={
proname:req.query.user,
propass:req.query.pass
}
dao.insert(‘product’,‘phone’,obj,function®{
res.send®;
})
})
//删除 自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-K2x8oPRq-1712314811269)]
[外链图片转存中…(img-m9hESxHD-1712314811270)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-PR5JAr6x-1712314811270)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
前端校招精编面试解析大全点击这里免费获取完整版pdf查看
相关阅读
发表评论