1. express生成器生成express模板
前提需要首先下载好:express-generator,命令如下(全局安装)
npm install -g express-generator
生成模板命令如下:
express 项目名称 --view=ejs
// --view 参数表示前端界面使用的引擎,这里使用ejs
这只是一个模板,模板下需要模块还需要重新下载,为此,需要用cd命令来到当前项目的目录下,输入命令:npm i 下载好相关模块。
2. 连接mongodb数据库
首先,前提是先下载好mongodb数据库,用nodejs连接mongodb数据库需要下载好一个模块。
首先,命令窗口下来到当前项目的目录,输入如下命令即可。
npm i mongoose
在当前项目的目录下新建config文件夹,表示这个文件夹下的文件为项目的相关配置文件。
这里db.config.js文件为mongodb连接配置文件,db.config.js里的代码如下:
const mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/liuzeTest');
// 连接mongodb数据库 liueTest 表示在mongodb数据库中新建liuzeTest数据库
之后打开bin文件下的www文件,加入如下代码,表示引入数据模块。
// 引入数据库模块
require('../config/db.config')
3. 启动服务器,实现mongodb的增删改查
在当前项目目录下,输入命令:npm start,这样项目就启动了,但是代码一改动,就又得输入这个命令,为了避免这样重复的操作,可以修改当前项目下package.json文件,修改如下:
或者这样也可以:
"scripts": {
"start": "nodemon ./bin/www"
},
前提是需要下载好node-dev和nodemon。
操作mongodb数据库另外需要提前构建好相应的模型,为了新建文件夹model(图片上小编写错了),在这个文件夹下构建相应的js模型文件即可。
写了一个简单的注册、修改、删除、查询代码(不符合项目的业务逻辑,只是为了演示操作而已)
3.1. 增加
后端js代码:
router.post('/user/add',(req,res)=>{
console.log(req.body);
const {username,password} = req.body;
userModel.create({
username,password
}).then((data)=>{
console.log(data);
});
res.send({
ok:1
});
})
前端请求代码如下:
postBtn.onclick = ()=>{
fetch('/api/user/add',{
method:'post',
body:JSON.stringify({
username:username.value,
password:password.value
}),
headers:{
'Content-Type':'application/json'
}
}).then((res)=>{
return res.json();
}).then((res)=>{
console.log(res);
})
}
// 注册按钮点击
运行结果:
3.2 修改
后端js代码(根据_id值进行修改):
router.post('/user/update/:id', (req, res) => {
console.log(req.body,req.params.id);
const {
username,
password
} = req.body;
userModel.updateOne(
{_id:req.params.id},
{
username,password
}
).then((data)=>{
res.send({
ok: 1
});
});
})
前端请求代码如下:
updateBtn.onclick = ()=>{
fetch('/api/user/update/63f188370691942759591324',{
method:'post',
body:JSON.stringify({
username:username.value,
password:password.value
}),
headers:{
"Content-Type":'application/json'
}
}).then((res)=>{
return res.json();
}).then((res)=>{
console.log(res);
})
}
// 更新按钮点击
运行结果:
3.3 删除
后端js代码(根据_id值进行删除):
router.get('/user/del/:id', (req, res) => {
userModel.deleteOne({
_id:req.params.id
}).then(function(data){
res.send({
ok:1
});
})
})
前端请求代码如下:
delBtn.onclick = function(){
fetch('/api/user/del/63f188370691942759591324')
.then(res=>res.json())
.then(res=>{
console.log(res);
})
}
// 删除按钮点击
3.4 查询
后端js代码:
router.get('/user/list',(req,res)=>{
userModel.find({},['username']).then(data=>{
res.send(data);
})
/*userModel.find({}, ['username']).sort({age:-1}).skip().limit().then(data => {
res.send(data);
})
根据年龄进行排序 当前为降序
skip(0) limit(10) 同[0:10]
*/
})
前端请求代码如下:
fetch('/api/user/list')
.then(res=>res.json())
.then(res=>{
let str_s = '';
res.forEach(ele=>{
str_s += `
<tr>
<td>${ele._id}</td>
<td>${ele.username}</td>
</tr>
`;
})
tbody_.innerHTML = str_s;
})
userModel.find()
// find() 参数没有表示查询所有数据
// find({},['username']) // 表示只查询username这个字段的所有数据信息
.sort()
/*
排序
如参数为{age:1} 表示按照年龄升序排序
{age:-1} 表示按照年龄降序排序
*/
.skip() .limit()
/*
用于分页查询使用,两个函数应该一起使用,类似切片操作
.skip(0).limit(10) 好比python中 list2[0:10]
.skip(10).limit(20) 好比python中 list2[10:20]
list2表示一个列表
*/