express的开始使用
-
检查是否安装脚手架:
//安装:
npm i -g express-generator -
使用脚手架搭建一个空项目:
express [项目名称]
-
项目初始化;
//进入项目目录
cd [项目名称]
//安装项目依赖
npm install -
npm start //其实本质启动文件就是 ./bin/www
-
mongodb在js中使用需要通过第三方驱动mongoose来连接和操作:
//保证mongodb的服务时开启状态
//连接数据库
const mongoose = require('mongoose');
const dbname = "f67";
mongoose.connect(
'mongodb://localhost/' + dbname,
{ useNewUrlParser: true, useUnifiedTopology: true }
);
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
// we're connected!
console.log("we're connected to " + dbname);
});
//下面是生产model的代码:(借助于schema)
const usersSchema = mongoose.Schema({
username: String,
password: String
});
const usersModel = mongoose.model('users', usersSchema);
//"users"必须与数据库集合名称一致//查询的使用:
usersModel.find({username:"zs"},function (err, data) {//错误优先
if (err) return console.error(err);
console.log(data);
})
//新增
usersModel.create({username:"ww",password:"000"},function (err, data) {//错误优先
if (err) return console.error(err);
console.log(data);
})
//修改
usersModel.updateOne({username:"ww"},{$set:{username:"zl"}},function (err, data) {//错误优先
if (err) return console.error(err);
console.log(data);
});
//删除
usersModel.deleteOne({username:"zl"},function (err, data) {//错误优先
if (err) return console.error(err);
console.log(data);
});-
目录结构:
-
代码:
// ./routes/users.js 表现层:完成与用户端的交互,并负责简单的数据处理
const usersService = require("../service/users");
router.post('/login', async function (req, res, next) {
const { username, password } = req.body;//接
id = ~~id;//数据处理
const data = await usersService.login({ username, password });//调用主体逻辑
res.send(data);//发
});// ./service/users.js 业务层:整个路由接口处理对应业务的主体逻辑
const usersDao = require("../dao/users");
const service = {}
service.login = async ({ username, password }) => {
const data = await usersDao.findUser({ username, password });
let isLogin = false;
if (data.length >= 1) {
isLogin = true;
}
return { isLogin };
}
module.exports = service;// ./dao/users.js 数据接口层:用来访问数据库,完成指定数据库操作
const usersModel = require("./models/usersModel");
const dao = {}
dao.findUser = async (condition)=>{
return await usersModel.find(condition);
}
module.exports = dao;
//下面是其他的一些附加操作(模块化):
// ./dao/db.js 用来链接数据库的模块
const mongoose = require('mongoose');
const dbname = "f67";
mongoose.connect(
'mongodb://localhost/' + dbname,
{ useNewUrlParser: true, useUnifiedTopology: true }
);
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
// we're connected!
console.log("we're connected to " + dbname);
});
// ./dao/models/usersModel 与数据库对应的某一个集合的模型
const mongoose = require("mongoose");
const usersSchema = mongoose.Schema({
username: String,
password: String
}, { versionKey: false });
const usersModel = mongoose.model('users', usersSchema);//users集合
module.exports = usersModel;
三层架构
-
使用mongodb
-
路由的使用:(下面统一以根目录为基准)
//./app.js
var studentsRouter = require('./routes/students');
app.use('/students', studentsRouter); //这是一级路由//./routes/students.js
var express = require('express');
var router = express.Router();
router.get('/get', function(req, res, next) {//这是二级路由
res.send('students respond with a resource');
});
module.exports = router;
express的路由以及中间件
-