设为首页 加入收藏

TOP

Node.js 入门:Express + Mongoose 基础使用(二)
2017-10-10 16:11:37 】 浏览:9316
Tags:Node.js 入门 Express Mongoose 基础 使用
要先安装 npm install mongoose -S 。安装之后在项目中引入并连接到数据库 userdb

var mongoose = require('mongoose');
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost:27017/userdb', {useMongoClient: true});

连接成功之后,定义一个 Schema,它一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力。

var userSchema = new mongoose.Schema({
    username: String,
    email: String
})

这里的 userSchema 还不能对数据库进行操作,只是定义了数据模型属性 username, email 为字符串类型。需要将该 Schema 发布为 Model,Model 是由 Schema 发布生成的模型,具有抽象属性和行为的数据库操作对。

var model = mongoose.model('user', userSchema);

最后 model 就可以对数据库进行操作了,把上面的代码封装成 userModel.js 到根目录下新建一个 models/ 目录下面,用 module.exports = model; 将 model 暴露出来供其他文件使用。

在 user.js 路由文件里,我们来引入 userModel.js 进行数据库操作。

var userModel = require('../models/userModel.js');

router.get('/list', function(req, res, next) {
  userModel.find(function(err, data){
    if(err){ return console.log(err) }
    res.render('UserList',{
      user: data
    })
  })
});

这里使用 userModel.find() 查询到所有用户。但是现在数据库里还是空的,我们来新增一个添加用户页面向数据库里插入数据。

添加用户

在 views/ 目录下新建 UserAdd.html 添加用户视图

<!DOCTYPE html>
<html>
<head>
    <title>用户编辑页面</title>
</head>
<body>
    <form action="/users/add" method="post">
        <input type="text" name="username" value="">
        <input type="email" name="email" value="">
        <button type="submit">submit</button>
    </form>
</body>
</html>

在 user.js 路由文件里来添加对应视图的路由

router.get('/add', function(req, res, next) {
  res.render('UserAdd');
});

这是渲染视图页面的路由,我们需要添加一个 post 方法的路由,在点击提交按钮的时候,把数据存进数据库里。

router.post('/add', function(req, res, next) {
  var newUser = new userModel({
    username: req.body.username,
    email: req.body.email
  })
  newUser.save(function(err, data){
    if(err){ return console.log(err) }
    res.redirect('/users/list');
  })
});

这里使用 new userModel() 创建了一个 Entity,它是由 Model 创建的实体,它的操作也会影响数据库。newUser 调用 save() 方法将数据保存到数据库中。然后 res.redirect() 将页面重定向到用户列表页面,这时就可以看到我们新增的用户显示在列表中了。接下来我们看看如何来编辑用户信息。

编辑用户

依然是创建相应的用户编辑视图:UserEdit.html

<!DOCTYPE html>
<html>
<head>
    <title>用户编辑页面</title>
</head>
<body>
    <form action="/users/update" method="post">
        <input type="hidden" name="id" value="<%= user._id %>">
        <input type="text" name="username" value="<%= user.username %>">
        <input type="email" name="email" value="<%= user.email %>">
        <button type="submit">update</button>
    </form>
</body>
</html>

添加对应的路由:/users/edit/:id 来渲染视图,/users/update 来修改数据库数据

router.get('/edit/:id', function (req, res, next) {
  var id = req.params.id;
  userModel.findOne({_id: id}, function (err, data) {
    res.render('UserEdit', {
      user: data
    })
  })
});
router.post('/update', function (req, res, next) {
  var id = req.body.id;
  userModel.findById(id, function (err, data) {
    if(err){ return console.log(err); }
    data.username = req.body.username;
    data.email = req.body.email;
    data.save(function(err){
      res.redirect('/users/list');
    })
  })
});

userModel.findOne() 会根据查询条件 {_id: id} 查询到对应的一

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HTTP协议 下一篇Angular4.0 实现数据绑定举例

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目