当前位置:网站首页>Koa2 addition, deletion, modification and query of JSON array
Koa2 addition, deletion, modification and query of JSON array
2022-07-06 23:14:00 【~Xinjiang】
Reference resources :
nodejs How to frame json Add, delete, modify and check the documents - web Development - Billion speed cloud This article mainly shows you “nodejs How to frame json Add, delete, modify and check the documents ”, The content is simple and easy to understand , Clarity of organization , I hope I can help you solve your doubts , Now let Xiaobian lead you to study and learn �...https://www.yisu.com/zixun/168616.html Small cases :javascript Realize to json Check the addition, deletion and modification of documents _ Blog of a dying salted fish -CSDN Blog _js Yes json Additions and deletions The following is books.json Grid file data [{ "id": 1, "bookName": " A perfect world ", "author": " Chendong ", "hero": " Shi Hao "}, { "id": 2, "bookName": " Wugeng period ", "author": " Shen Leping ", "hero": " Wu Geng "}, { "id": 4, "bookName": " Nine songs of heaven ", "author": " Chen Lan ", "hero": " Han Fei "}
https://blog.csdn.net/weixin_46682277/article/details/123011417
front end
index.vue:
<!--page1-->
<template>
<div class="userManage">
<el-card>
<div style="margin-bottom: 10px">
<el-input
v-model="searchName"
clearable
placeholder=" Enter user name search "
style="width: 200px; margin-right: 10px"
/>
<el-button
sizi="mini"
type="success"
icon="el-icon-search"
@click="searchUser(searchName)"
> Search for </el-button
>
<el-button
sizi="mini"
type="warning"
icon="el-icon-refresh-left"
@click="searchName = ''"
> Reset </el-button
>
<el-button
sizi="mini"
@click="handleAdd()"
type="primary"
icon="el-icon-plus"
> newly added </el-button
>
<el-button
@click="getUserList()"
sizi="mini"
icon="el-icon-refresh"
style="float: right"
> Refresh </el-button
>
</div>
<el-table :data="tableData" border v-loading="isLoading">
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column
label=" user name "
prop="username"
align="center"
width="150px"
></el-table-column>
<el-table-column
label=" password "
prop="password"
align="center"
></el-table-column>
<el-table-column label=" operation " align="center">
<template slot-scope="scope">
<el-button size="mini" @click="showEditDialog(scope.row)">
<i class="el-icon-edit" /> edit
</el-button>
<el-button
size="mini"
type="danger"
@click="handleDelete(scope.row)"
>
<i class="el-icon-delete" /> Delete
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<UserManageDialog
:dialog="dialog"
:formData="formData"
@addUser="addUser"
@editUser="editUser"
></UserManageDialog>
</div>
</template>
<script>
import axios from "axios";
import UserManageDialog from "./userManageDialog.vue";
import qs from "qs";
export default {
name: "page1",
components: { UserManageDialog },
data() {
return {
searchName: "",
isLoading: false,
dialog: {
show: false,
title: "",
},
formData: {
id: "",
username: "",
password: "",
},
tableData: [
{
id: "",
username: "admin",
password: "123",
},
],
};
},
props: {},
created() {},
mounted() {
this.getUserList();
},
computed: {},
methods: {
// Open the new user window
handleAdd() {
this.dialog = {
show: true,
title: " New users ",
option: "add",
};
this.formData = {
username: "",
password: "",
};
},
// Open the edit user window
showEditDialog(row) {
console.log("row:", row);
this.dialog = {
show: true,
title: " Edit user ",
option: "edit",
};
this.formData = {
id: row.id,
username: row.username,
password: row.password,
};
},
// Get the list of users
async getUserList() {
this.isLoading = true;
let data = await axios.get("http://localhost:3000/users");
this.tableData = data.data.data.users;
this.isLoading = false;
},
// Query according to user name
async searchUser(searchName) {
if (!searchName) {
this.getUserList();
return;
}
this.isLoading = true;
let { data } = await axios.get(
"http://localhost:3000/users/findByUsername",
{
params: { username: searchName },
}
);
this.tableData = data.data;
this.isLoading = false;
},
// Delete user
handleDelete(row) {
this.$confirm(" This operation will permanently delete the file , Whether or not to continue ?", " Tips ", {
confirmButtonText: " determine ",
cancelButtonText: " Cancel ",
type: "warning",
})
.then(async () => {
await axios.delete(`http://localhost:3000/users`, {
params: { id: row.id },
});
this.$message({
type: "success",
message: " Delete successful !",
showClose: true,
});
this.getUserList();
})
.catch(() => {
this.$message({
type: "info",
message: " Delete cancelled ",
showClose: true,
});
});
},
// New users
async addUser() {
await axios.post(
"http://localhost:3000/users",
qs.stringify({
username: this.formData.username,
password: this.formData.password,
})
);
this.dialog.show = false;
this.$notify({
title: " success ",
message: " New user succeeded !",
type: "success",
});
this.getUserList();
},
// Edit user
async editUser() {
await axios.put("http://localhost:3000/users", {
id: this.formData.id,
username: this.formData.username,
password: this.formData.password,
});
this.dialog.show = false;
this.$notify({
title: " success ",
message: " Edit user succeeded !",
type: "success",
});
this.getUserList();
},
},
watch: {},
};
</script>
userManageDialog.vue:
<!--userManageDialog -->
<template>
<div class="userManageDialog">
<el-dialog
:title="dialog.title"
width="45%"
:visible.sync="dialog.show"
v-if="dialog.show"
>
<el-form
ref="ref_form_userManage"
:model="formData"
:rules="rules"
label-width="100px"
>
<el-form-item label=" user name " prop="username">
<el-input
v-model="formData.username"
autocomplete="off"
style="width: 90%"
></el-input>
</el-form-item>
<el-form-item label=" password " prop="password">
<el-input
v-model="formData.password"
autocomplete="off"
style="width: 90%"
></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialog.show = false"> take eliminate </el-button>
<el-button
v-if="dialog.option == 'add'"
@click="addUser('ref_form_userManage')"
type="primary"
> indeed set </el-button
>
<el-button
v-if="dialog.option == 'edit'"
@click="editUser('ref_form_userManage')"
type="primary"
> indeed set </el-button
>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: "userManageDialog",
props: ["dialog", "formData"],
data() {
return {
fileList: [],
rules: {
username: [
{ required: true, message: " Please enter the user name ", trigger: "blur" },
],
},
};
},
created() {},
mounted() {},
computed: {},
methods: {
addUser(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
this.$emit("addUser");
} else {
console.log("error submit!!");
return false;
}
});
},
editUser(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
this.$emit("editUser");
} else {
console.log("error submit!!");
return false;
}
});
},
},
watch: {},
};
</script>
<style lang="scss" scoped>
</style>
Back end :
users.js:
const router = require('koa-router')()
const fs = require("fs")
const uuid = require('uuid');
router.prefix('/users')
// according to username Query the user
router.get('/findByUsername', async (ctx, next) => {
let { username } = ctx.request.query
let findJson = () => {
return new Promise((resolve, reject) => {
fs.readFile('users.json', 'utf-8', function (err, data) {
if (err) {
resolve({ code: -1, msg: ' The query fails ' + err })
return console.error(err);
}
resolve({ code: 0, data: JSON.parse(data).users.filter((item) => item.username === username) })
})
})
}
ctx.body = await findJson()
})
// Query all users
router.get('/', async (ctx, next) => {
let findJson = () => {
return new Promise((resolve, reject) => {
fs.readFile('users.json', 'utf-8', function (err, data) {
if (err) {
resolve({ code: -1, msg: ' The query fails ' + err })
return console.error(err);
}
resolve({ code: 0, data: JSON.parse(data) })
})
})
}
ctx.body = await findJson()
})
// Delete user
router.delete('/', async (ctx, next) => {
let { id } = ctx.request.query;
let deleteJson = () => {
return new Promise((resolve, reject) => {
fs.readFile('users.json', 'utf-8', function (err, data) {
if (err) {
resolve({ code: -1, msg: ' Delete failed ' + err })
return console.error(err);
}
let jsonData = JSON.parse(data).users.filter((item) => item.id !== id);
fs.writeFile('users.json', JSON.stringify({ "users": jsonData }), function (err) {
if (err) {
resolve({ code: -1, msg: ' Delete failed ' + err })
}
resolve({ code: 0, msg: ' Delete successful ' })
})
})
})
}
ctx.body = await deleteJson()
})
// Add users
router.post('/', async (ctx, next) => {
let { username, password } = ctx.request.body
let id = uuid.v4();
let writeJson = () => {
return new Promise((resolve, reject) => {
fs.readFile('users.json', 'utf-8', function (err, data) {
if (err) {
resolve({ code: -1, msg: ' Add failed ' + err })
return console.error(err);
}
let jsonData = JSON.parse(data)
jsonData.users.push({ id, username, password })
fs.writeFile('users.json', JSON.stringify(jsonData), function (err) {
if (err) {
resolve({ code: -1, msg: ' Add failed ' + err })
}
resolve({ code: 0, msg: ' Added successfully ' })
})
})
})
}
// Back to the front end
ctx.body = await writeJson()
})
// Modify the user
router.put('/', async (ctx, next) => {
let { id, username, password } = ctx.request.body
let writeJson = () => {
return new Promise((resolve, reject) => {
fs.readFile('users.json', 'utf-8', function (err, data) {
if (err) {
resolve({ code: -1, msg: ' Modification failed ' + err })
return console.error(err);
}
let jsonData = JSON.parse(data).users
jsonData.splice(jsonData.findIndex(item => item.id === id), 1, { id, username, password })
fs.writeFile('users.json', JSON.stringify({ "users": jsonData }), function (err) {
if (err) {
resolve({ code: -1, msg: ' Modification failed ' + err })
}
resolve({ code: 0, msg: ' Modification successful ' })
})
})
})
}
// Back to the front end
ctx.body = await writeJson()
})
module.exports = router
users.json:
{
"users": [
{
"id": "adfsg",
"username": " Li Si ",
"password": "444asd"
},
{
"id": "d4d2c1df-8c78-4cba-9e42-58c83c26eb5b",
"username": "ag",
"password": "dfg"
},
{
"id": "cadbd3d6-6cab-4f82-ae2d-fe2c0ceae5b7",
"username": "tasdfasd",
"password": "rtasdf"
}
]
}
边栏推荐
- Word2vec (skip gram and cbow) - pytorch
- Children's pajamas (Australia) as/nzs 1249:2014 handling process
- mysql查看表结构的三种方法总结
- Designed for decision tree, the National University of Singapore and Tsinghua University jointly proposed a fast and safe federal learning system
- 欧洲生物信息研究所2021亮点报告发布:采用AlphaFold已预测出近1百万个蛋白质
- 使用MitmProxy离线缓存360度全景网页
- The application of machine learning in software testing
- Modules that can be used by both the electron main process and the rendering process
- DevSecOps软件研发安全实践——发布篇
- 监控界的最强王者,没有之一!
猜你喜欢
COSCon'22 社区召集令来啦!Open the World,邀请所有社区一起拥抱开源,打开新世界~
欧洲生物信息研究所2021亮点报告发布:采用AlphaFold已预测出近1百万个蛋白质
asp读取oracle数据库问题
Children's pajamas (Australia) as/nzs 1249:2014 handling process
CSDN 上传图片取消自动加水印的方法
[unity] upgraded version · Excel data analysis, automatically create corresponding C classes, automatically create scriptableobject generation classes, and automatically serialize asset files
Motion capture for snake motion analysis and snake robot development
(1)长安链学习笔记-启动长安链
Method of canceling automatic watermarking of uploaded pictures by CSDN
Designed for decision tree, the National University of Singapore and Tsinghua University jointly proposed a fast and safe federal learning system
随机推荐
Use mitmproxy to cache 360 degree panoramic web pages offline
How to choose the server system
同一个作业有两个source,同一链接不同数据库账号,为何第二个链接查出来的数据库列表是第一个账号的
Balanced Multimodal Learning via On-the-fly Gradient Modulation(CVPR2022 oral)
DR-Net: dual-rotation network with feature map enhancement for medical image segmentation
基于PaddlePaddle平台(EasyDL)设计的人脸识别课堂考勤系统
Unified Focal loss: Generalising Dice and cross entropy-based losses to handle class imbalanced medi
MySQL数据库之JDBC编程
What does front-end processor mean? What is the main function? What is the difference with fortress machine?
Some suggestions for foreign lead2022 in the second half of the year
动作捕捉用于蛇运动分析及蛇形机器人开发
Designed for decision tree, the National University of Singapore and Tsinghua University jointly proposed a fast and safe federal learning system
云原生(三十二) | Kubernetes篇之平台存储系统介绍
石墨文档:4大对策解决企业文件信息安全问题
PDF批量拆分、合并、书签提取、书签写入小工具
Slide the uniapp to a certain height and fix an element to the top effect demo (organize)
On the problems of born charge and non analytical correction in phonon and heat transport calculations
How to achieve text animation effect
企业不想换掉用了十年的老系统
Chapter 19 using work queue manager (2)