Nodejs调用MongoDB
-
要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。
如果数据库不存在,MongoDB 将创建数据库并建立连接。
- 导入MongoDB包:
cnpm install mongodb --save
- 引入MongoDB文件:
const {MongoClient} = require('mongodb');
- 定义数据库连接地址url,定义要操作的数据库dbName, 实例化MongoClient 传入数据库连接地址:
const url = 'mongodb://127.0.0.1:27017';
const dbName = 'aniu';
const client = new MongoClient(url, { useUnifiedTopology: true });
- 连接数据库:
client.connect((err)=>{
if(err){
console.log(err);
return;
}
console.log('数据库连接成功');
});
操作数据库
- 查找数据:
db.collection('user').find({ "age": 13 }).toArray((err, data) => {
console.log(data);
// 操作数据库完成以后要关闭数据库连接
client.close();
})
- 增加数据:
db.collection('user').insertOne({ 'username': 'nodejs操作mongodb', 'age': 10 }, (err, result) => {
if (err) {
console.log(err);
return;
}
console.log("增加成功")
console.log(result);
// 操作数据库完成以后要关闭数据库连接
client.close();
})
- 修改数据:
db.collection('user').updateOne({ 'username': 'kko1' }, { $set: { 'age': 111222 } }, (err, result) => {
if (err) {
console.log(err);
return;
}
console.log('修改成功');
console.log(result);
// 操作数据库完成以后要关闭数据库连接
client.close();
})
- 删除一条数据:
db.collection('user').deleteOne({ 'name': 'aniu' }, (err) => {
if (err) {
console.log(err);
return;
}
console.log('删除一条数据成功');
client.close();
})
- 删除多条数据:
db.collection('user').deleteMany({ 'name': 'zhangsan' }, (err) => {
if (err) {
console.log(err);
return;
}
console.log('删除多条数据成功');
client.close();
})
总结:
// cnpm istall mongodb --save
// 引入mongodb文件
const { MongoClient } = require('mongodb');
// 定义数据库连接的地址
const url = 'mongodb://127.0.0.1:27017';
// 定义要操作的数据库
const dbName = 'aniu';
// 实例化MongoClient 传入数据库连接地址
const client = new MongoClient(url, { useUnifiedTopology: true });
// 连接数据库
client.connect((err) => {
if (err) {
conssole.log(err);
return;
}
console.log('数据库连接成功');
let db = client.db(dbName);
// 1.查找数据
// db.collection('user').find({ "age": 13 }).toArray((err, data) => {
// console.log(data);
// // 操作数据库完成以后要关闭数据库连接
// client.close();
// })
// 2.增加数据
// db.collection('user').insertOne({ 'username': 'nodejs操作mongodb', 'age': 10 }, (err, result) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log("增加成功")
// console.log(result);
// 操作数据库完成以后要关闭数据库连接
// client.close();
// })
// 3.修改数据
// db.collection('user').updateOne({ 'username': 'kko1' }, { $set: { 'age': 111222 } }, (err, result) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('修改成功');
// console.log(result);
// // 操作数据库完成以后要关闭数据库连接
// client.close();
// })
// 4.删除一条数据
// db.collection('user').deleteOne({ 'name': 'aniu' }, (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('删除一条数据成功');
// client.close();
// })
// 5.删除多条数据
// db.collection('user').deleteMany({ 'name': 'zhangsan' }, (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('删除多条数据成功');
// client.close();
// })
});
nodejs服务器端操纵数据库
我们要通过在页面中输入数据传入数据库中,并保持页面与数据库的动态相连。
app.js
const http = require('http');
const ejs = require('ejs');
const app = require('./module/route.js');
const querystring = require('querystring');
const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017';
const dbName = 'aniu';
// const client = new MongoClient(url, { useUnifiedTopology: true });
// 注册web服务器
http.createServer(app).listen(3000);
// 配置路由
app.get('/', function(req, res) {
MongoClient.connect(url, { useUnifiedTopology: true }, (err, client) => {
if (err) {
console.log(err);
return;
}
let db = client.db(dbName);
// 查询数据
db.collection('people').find({}).toArray((err, result) => {
if (err) {
console.log(err);
return;
}
console.log(result);
client.close();
ejs.renderFile('./views/index.ejs', {
list: result
}, (err, data) => {
res.send(data);
});
})
})
});
app.get('/register', function(req, res) {
ejs.renderFile('./views/register.ejs', {}, (err, data) => {
res.send(data);
})
})
app.post('/doRegister', function(req, res) {
// name=aniu&age=11
// {
// "name": "aniu",
// "age":11
// }
let body = querystring.parse(req.body);
MongoClient.connect(url, { useUnifiedTopology: true }, (err, client) => {
if (err) {
console.log(err);
return;
}
let db = client.db(dbName);
db.collection('people').insertOne(body, (err, result) => {
if (err) {
console.log(err);
return;
}
console.log('增加数据成功');
res.send('增加数据成功');
})
})
})
index.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>获取用户列表数据</h2>
<ul>
<%for(var i=0;i<list.length;i++){%>
<li>
<%=list[i].name%>---
<%=list[i].age%>
</li>
<%}%>
</ul>
</body>
</html>
register.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<h2>注册页面</h2>
<form action="/doRegister" method="POST">
用户名: <input type="text" name="name">
<br>
<br> 年龄: <input type="text" name="age">
<br>
<br>
<input type="submit" value="提交">
</form>
</body>
</html>
route.js
const fs = require('fs');
const url = require('url');
const path = require('path');
// 扩展res
function changeRes(res) {
res.send = (data) => {
res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });
res.end(data);
}
}
// 根据后缀名获取文件类型
function getMimeFile(extname) {
var data = fs.readFileSync('./data/mime.json');
var mimeObj = JSON.parse(data.toString());
return mimeObj[extname];
}
// 静态Web服务方法
function initStatic(request, response, staticPath) {
// 获取地址
let pathName = url.parse(request.url).pathname;
pathName = pathName == '/' ? '/index.html' : pathName;
let extname = path.extname(pathName);
// 通过fs模板读入文件
try {
let data = fs.readFileSync('./' + staticPath + pathName);
if (data) {
let mime = getMimeFile(extname);
response.writeHead(200, { 'Content-Type': '' + mime + ';charset="utf-8"' });
response.end(data);
}
} catch (error) {
}
}
let server = () => {
let G = {
_get: {},
_post: {},
staticPath: 'static' //静态web目录
};
let app = function(req, res) {
// 扩展res的方法
changeRes(res);
// 配置静态web服务器
initStatic(req, res, G.staticPath);
let pathname = url.parse(req.url).pathname;
// 获取请求类型
let method = req.method.toLowerCase();
if (G['_' + method][pathname]) {
if (method == 'get') {
G['_' + method][pathname](req, res);
} else {
//post 获取post数据 把它绑定到req.body
let postData = '';
req.on('data', (chunk) => {
postData += chunk;
});
req.on('end', () => {
req.body = postData;
G['_' + method][pathname](req, res);
});
}
} else {
res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' });
res.end('404页面不存在');
}
}
// get请求
app.get = function(str, cb) {
G._get[str] = cb;
}
// post请求
app.post = function(str, cb) {
G._post[str] = cb;
}
// 配置静态web服务目录
app.static = function(staticPath) {
G.staticPath = staticPath;
}
return app;
}
module.exports = server();