족제비 없는 족제비
이 문제를 처리하기 위해 전체 드라이버를 실현할 필요가 없다.네, 물론 운전사는 우리의 생활에 많은 편의를 제공했습니다.그러나 단순함과 경량급을 유지하기 위해 우리는 족제비 없이 몬godb를 사용하여 CRUD 조작을 할 수밖에 없다.
검증은요?걱정하지 마세요. sanitize-html과 같은 패키지는 몬goDB에서 데이터베이스에 저장되기 전에 데이터를 검증하는 데 사용할 수 있습니다.
Get the Source code if you don't want to follow along.
자, 시작합시다.
nodejs 서버 만들기
터미널에서 다음 명령을 실행합니다.
mkdir mongodb-without-mongoose && cd mongodb-without-mongoose
이 폴더들은 mongodb-without-mongoose
이라는 폴더를 만들고 이 폴더로 이동합니다.npm init -y && npm install express mongodb --save
패키지를 초기화합니다.json 파일은 명령의 첫 번째 부분을 실행하는 원본 폴더에 의존 항목을 설치합니다.두 번째 부분은 express.js
과 MongoDB
을 우리의 의존항으로 설치하는 것이다.프로젝트 폴더에
app.js
파일을 만듭니다.파일을 다음과 같이 채우면 간단한 서버를 만들 수 있습니다.const express = require('express')
const mongodb = require('mongodb')
const app = express()
let db
const PORT = 5000
app.get('/testRoute', (req, res) => res.end('Hello from Server!'))
app.listen(PORT, () => {
console.log(`Node.js App running on port ${PORT}...`)
})
서버 실행을 시작하려면:node app.js
여기에서 우리는 방금 포트 5000에 간단한 서버를 만들었다.localhost:5000/testRoute
에서 응답, Hello from Server!서버에서 몬godb로 연결
이 예에서, 우리는 윈도우즈의 로컬 몬godB를 연결할 것이다.우리는 몬godB의 어떤 클라우드 서비스도 사용할 생각이 없습니다.따라서
app.js
에 줄을 추가해서 연결을 만듭니다.// ...
const app = express()
let db
let connectionString = `mongodb://localhost:27017/crud`
이것은 윈도우즈가 로컬 데이터베이스에 연결되는 기본 연결 문자열입니다.이제 이 문자열을 사용해서 몬godB에 연결합시다.// ...
const app = express()
let db
let connectionString = `mongodb://localhost:27017/crud`
mongodb.connect(
connectionString,
{ useNewUrlParser: true, useUnifiedTopology: true },
function (err, client) {
db = client.db()
app.listen(5000)
}
)
몬godb에 있습니다.연결 문자열을 첫 번째 인자로 하고 두 번째 인자는 MongoDB에서 버림 경고를 받지 않는 대상입니다.마지막으로, 마지막 매개 변수는 몬godB 다음에 사용할 수 있는 리셋 함수입니다.함수의 역할은 몬godB에 연결을 시도하는 것입니다.
우리의 예에서, 우리는 데이터베이스를 변수에 저장하여 더욱 사용하도록 하고, 포트 5000에서 감청하기 위해 프로그램을 시작했다.
현재 우리는 데이터베이스에 연결되어 있으며, 응용 프로그램을 유용하게 하기 위해 일부 단점을 만들 수 있다.
// ...
mongodb.connect(
connectionString,
{ useNewUrlParser: true, useUnifiedTopology: true },
function (err, client) {
db = client.db()
app.listen(5000)
}
)
app.post('/create-data', function (req, res) {
// Sending request to create a data
db.collection('data').insertOne({ text: req.body.text }, function (
err,
info
) {
res.json(info.ops[0])
})
})
여기에서, 우리는 /create-data
에 응용 프로그램의post 요청을 설정했습니다.여기에서, 우리는 db.collection()
을 사용하여 우리가 연결한crud 데이터베이스에서 집합 이름을 지정합니다.이 방법에서, 우리는 집합에서 문서를 만들기 위해
insertOne()
을 연결합니다.우리는 이 함수에서 두 개의 매개 변수를 전달한다.첫 번째는 req에서 온 문자열이 있는 텍스트 속성입니다.신체 물체.두 번째는 컴파일 함수입니다.
insetOne()
방법이 문서를 집합에 삽입하려고 할 때 일부 동작을 수행합니다.리셋 함수 중, 우리는 두 개의 매개 변수err와 info가 있습니다.우리는
info.ops[0]
에서 우리의 문서 집합을 검색한 후에 요청을 보낸 사용자에게 응답할 것입니다.postman에서 나온 json 데이터를 사용하여
localhost:5000/create-data
에서post 요청을 시도해 보겠습니다.{
"text": "Kamal Hossain"
}
너 뭐 있어?나는 응답으로 HTML 값이 쌓여 있는
500 Internal Server Error
을 받았다.그러면 서버가 실행하는 컨트롤러를 검사해 봅시다.TypeError:정의되지 않은 속성 "text"를 읽을 수 없습니다.
나는 컨트롤러 안에 몇 줄이 있는데, 첫 번째 줄은 위에서 말한 것이다.그렇다면 왜 이런 상황이 벌어졌을까?
저희는 nodejs 프로그램에 JSON 데이터를 보냈습니다. 서버는express의 도움으로 만들어졌습니다.js.따라서 기본적으로 들어오는 요청에서 JSON 객체를 읽을 수 없습니다.따라서, 우리는 반드시 이 때문에 한 줄을 추가해야 한다.
// ...
mongodb.connect(
connectionString,
{ useNewUrlParser: true, useUnifiedTopology: true },
function (err, client) {
db = client.db()
app.listen(5000)
}
)
app.use(express.json())
이것은 현재의 문제를 해결할 것이다.서버를 저장하고 다시 시작합니다.그리고 다시 요청을 보냅니다.{
"text": "Kamal Hossain",
"_id": "5f5c27353c14cc09309d4440"
}
이것은 내가 서버에서 받은 회답이다.그것은 insertOne()
방법에서 함수를 되돌려 보낸 것이다. id는 전체 데이터베이스에서 특정 문서를 식별하는 유일한 id입니다.현재 우리는 첫 번째 문서를 만들었습니다. get 요청을 통해 집합에서 모든 문서를 가져올 수 있는 경로를 만듭니다.
// ...
app.post('/create-data', function (req, res) {
// Sending request to create a data
db.collection('data').insertOne({ text: req.body.text }, function (
err,
info
) {
res.json(info.ops[0])
})
})
app.get('/', function (req, res) {
// getting all the data
db.collection('data')
.find()
.toArray(function (err, items) {
res.send(items)
})
})
여기에서 우리는 루트를 /
으로 설정할 것입니다. 이것은 모든 영역의 루트가 될 것입니다.우리의 예에서localhost:5000.여기에서 우리는 find()
방법을 사용하여 집합에서 모든 문서를 얻는다.마지막으로, 우리는 toArray()
방법을 연결하여 모든 문서를 하나의 그룹에 넣고, toArray()
의 리셋에서 응답을 되돌려줍니다.postman에서
localhost:5000/
사이에 get 요청을 실행하도록 하겠습니다.[
{
"_id": "5f5c27353c14cc09309d4440",
"text": "Kamal Hossain"
}
]
이제 응용 프로그램에 두 개의 노선을 추가해서 문서를 업데이트하고 삭제할 것입니다.// ...
app.get('/', function (req, res) {
// getting all the data
db.collection('data')
.find()
.toArray(function (err, items) {
res.send(items)
})
})
app.put('/update-data', function (req, res) {
// updating a data by it's ID and new value
db.collection('data').findOneAndUpdate(
{ _id: new mongodb.ObjectId(req.body.id) },
{ $set: { text: req.body.text } },
function () {
res.send('Success updated!')
}
)
})
Dell의 /update-data
노선에서는 주로 findOneAndUpdate()
을 통해 파일을 업데이트합니다.이 방법에서는 업데이트할 대상 Id를 전달하고 업데이트된 텍스트를 전달합니다.마지막으로, 우리는 단지 성공적인 회답을 보낼 뿐이다.지금 우리는 문서를 삭제합니다.
// ...
app.put('/update-data', function (req, res) {
// updating a data by it's ID and new value
db.collection('data').findOneAndUpdate(
{ _id: new mongodb.ObjectId(req.body.id) },
{ $set: { text: req.body.text } },
function () {
res.send('Success updated!')
}
)
})
app.delete('/delete-data', function (req, res) {
// deleting a data by it's ID
db.collection('data').deleteOne(
{ _id: new mongodb.ObjectId(req.body.id) },
function () {
res.send('Successfully deleted!')
}
)
})
우리의 delete-data
루트에서, 우리는 delete()
방법을 사용하여 집합에서 문서를 삭제한다.마지막으로 리셋 함수에서 클라이언트에게 응답을 보냅니다.원재 https://kamalhossain.me/blog/mongodb-without-mongoose
Reference
이 문제에 관하여(족제비 없는 족제비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kamalhossain/mongodb-without-mongoose-4ilc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)