如何在 Node.js 中为本地/自定义数据库中的每条记录添加唯一 Id?
原文:https://www . geesforgeks . org/如何向本地定制数据库节点中的每个记录添加唯一 id-js/
自定义数据库表示文件系统中的本地数据库。有两种类型的数据库“SQL”和“NoSQL”。在 SQL 数据库中,数据以表的方式存储,而在 Nosql 数据库中,数据以某种特定的方式独立存储,以独立标识每条记录。我们还可以用 Nosql 方式在本地创建自己的数据库或数据存储。为了以 NoSQL 的方式存储信息,我们必须为每条记录添加一个唯一的 Id,这样每条记录都可以被独立识别。
创建本地数据库并向其中添加具有唯一标识的记录需要一些步骤。这些步骤如下:
-
在项目目录的根目录下创建 package.json 文件。 命令创建包文件
js npm init -y
-
安装 express 和 body-parser 包。 命令安装软件包
js npm install express body-parser
-
创建一个显示表单的 GET 路径(将信息提交给数据库的 HTML 表单)。
- 创建后续的帖子路由来处理表单提交请求。
- 将服务器设置为在特定端口(开发者端口–3000)上运行。
- 创建一个存储库文件,并添加与创建本地数据库相关的所有逻辑。
- 在存储库文件中创建一个方法,为每个记录添加一个唯一的字母数字 id。
- 在存储库文件中创建一个方法,以 json 格式将每个唯一的记录添加到数据库中。
这个例子说明了如何创建一个本地数据库,并用一个唯一的 id 向其中添加记录。
文件名:index.js
const express = require('express')
const bodyParser = require('body-parser')
const repo = require('./repository')
const app = express()
const port = process.env.PORT || 3000
// The body-parser middleware
// to parse form data
app.use(bodyParser.urlencoded({extended : true}))
// Get route to display HTML form
app.get('/signup', (req, res) => {
res.send(`
<div>
<form method='POST'>
<div>
<div>
<label id='email'>Username</label>
</div>
<input type='text' name='email'
placeholder='Email'
for='email'>
</div>
<div>
<div>
<label id='password'>Password</label>
</div>
<input type='password' name='password'
placeholder='Password'
for='password'>
</div>
<div>
<button>Sign Up</button>
</div>
</form>
</div>
`)
});
// Post route to handle form submission
// logic and add data to the database
app.post('/signup', async (req, res) => {
const {email, password} = req.body
const addedRecord = await
repo.createNewRecord({email, password})
console.log(`Added Record :
${JSON.stringify(addedRecord, null, 4)}`)
res.send("Information added to the "
+ "database successfully.")
})
// Server setup
app.listen(port, () => {
console.log(`Server start on port ${port}`)
})
文件名:repository.js
// Importing node.js file system, crypto module
const fs = require('fs')
const crypto = require('crypto')
class Repository {
constructor(filename) {
// Filename where datas are going to store
if(!filename) {
throw new Error(
'Filename is required to create a datastore!')
}
this.filename = filename
try {
fs.accessSync(this.filename)
} catch (err) {
// If file not exist
// it is created with empty array
fs.writeFileSync(this.filename, '[]')
}
}
// Logic to add data or record
async createNewRecord(attributes) {
// Assign unique Id to each record
attributes.id = this.generateUniqueID()
// Read filecontents of the datastore
const jsonRecords = await
fs.promises.readFile(this.filename, {
encoding : 'utf8'
})
// Parsing JSON records in JavaScript
// object type records
const objRecord = JSON.parse(jsonRecords)
// Adding new record
objRecord.push(attributes)
// Writing all records back to the file
await fs.promises.writeFile(
this.filename,
JSON.stringify(objRecord, null, 2)
)
return attributes;
}
// Method to generate unique ID
generateUniqueID() {
return crypto.randomBytes(8).toString('hex')
}
}
// The 'datastore.json' file created at runtime
// and all the information provided via signup
// form store in this file in JSON format.
module.exports = new Repository('datastore.json')
包联文件:
运行该程序的步骤 使用以下命令运行 index.js 文件:
node index.js
提交回复的表单: 注意:这里三个回复一个接一个提交,所有回复都存储在 datastore.json 文件中。
提交请求后重定向页面:
输出:
数据库:
注意:第一次运行的程序数据库(datastore.json)文件在项目目录中不存在,它在运行程序后动态创建并存储提交的响应。之后,所有提交的回复都被逐一添加到数据库中。
版权属于:月萌API www.moonapi.com,转载请注明出处