NodeJS

连接MongoDB数据库

Mongoose

代码示例:

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8">
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <div>
      <div>用户名:<input type="text" id="username"></div>
      <div>密码:<input type="password" id="pwd"></div>
      <div>年龄:<input type="number" id="age"></div>
      <div><button id="register">注册</button></div>
    </div>
    <div>
      <button id="update">更新</button>
      <button id="delete">删除</button>
    </div>
    <table>
      <thead>
      <tr>
        <td>id</td>
        <td>用户名</td>
        <td>年龄</td>
      </tr>
      </thead>
      <tbody>

      </tbody>
    </table>
    <script>
      const register = document.querySelector('#register')
      const username = document.querySelector('#username')
      const pwd = document.querySelector('#pwd')
      const age = document.querySelector('#age')
      const update = document.querySelector('#update')
      const deleteButton = document.querySelector('#delete')
      register.onclick = () => {
        // console.log(username.value, pwd.value, age.value)
        fetch('/api/user/add', {
          method: 'POST',
          body: JSON.stringify({
            username: username.value,
            pwd: pwd.value,
            age: age.value
          }),
          headers: {
            'Content-Type': 'application/json'
          }
        })
                .then(res => res.json())
                .then(res => {
                  console.log(res)
                })
                .catch(err => console.log(err))
      }
      deleteButton.onclick = () => {
        fetch('/api/user/delete/6317decdeb469ce9190d8c5c')
                .then(res => res.json())
                .then(res => {
                  console.log(res)
                })
                .catch(err => console.log(err))
      }
      update.onclick = () => {
        fetch('/api/user/update/6317decdeb469ce9190d8c5c', {
          method: 'POST',
          body: JSON.stringify({
            username: 'username',
            pwd: 'password',
            age: 24
          }),
          headers: {
            'Content-Type': 'application/json'
          }
        })
                .then(res => res.json())
                .then(res => {
                  console.log(res)
                })
                .catch(err => console.log(err))
      }
      fetch('/api/user/list?page=1&limit=2')
              .then(res => res.json())
              .then(res => {
                // console.log(res)
                const tbody = document.querySelector('tbody')
                tbody.innerHTML = res.map(item => `
                <tr>
                    <td>${item._id}</td>
                    <td>${item.username}</td>
                    <td>${item.age}</td>
                </tr>
                `).join('')
              })
              .catch(err => console.log(err))
    </script>
  </body>
</html>
var express = require('express');
var router = express.Router();

const UserModel = require('../model/UserModel')

/* GET users listing. */
router.get('/user/add', (req, res, next) => {
    res.send('respond with a resource');
});

router.post('/user/add', (req, res) => {
    // console.log(req.body)
    const {username, pwd, age} = req.body

    UserModel.create({
        username,
        pwd,
        age
    })
        .then(data => {
            // console.log(data)
            res.send({ok: 1})
        })
        .catch(err => console.log(err))
})

router.post('/user/update/:id', (req, res) => {
    // console.log(req.body, req.params.id)
    const {username, pwd, age} = req.body

    UserModel.updateOne({_id: req.params.id}, {  // 仅作用于第一项结果
        username,
        pwd,
        age
    }).then(data => {
        // console.log(data)
        res.send({ok: 1})
    }).catch(err => console.log(err))
})

router.get('/user/delete/:id', (req, res) => {
    UserModel.deleteOne({_id: req.params.id}).then(data => {
        res.send({ok: 1})
    }).catch(err => console.log(err))
})

router.get('/user/list', (req, res) => {
    // console.log(req.query)
    const {page, limit} = req.query

    UserModel.find({}, ['username', 'age'])
        .sort({age: 1})
        .skip((page - 1) * limit)
        .limit(limit)
        .then(data => {  // 列表中:仅返回的字段(默认的返回字段中会附带_id)
        res.send(data)
    })
})

module.exports = router;
// model/UserModel.js

const mongoose = require('mongoose')

const UserType = {  // 限制数据类型
    username: String,
    pwd: String,
    age: Number
}

const Schema = new mongoose.Schema(UserType)

const UserModel = mongoose.model('user', Schema)  // 创建模型(创建users集合)

module.exports = UserModel
#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('myapp:server');
var http = require('http');

require('../config/db.config')  // 引入(在根文件中)

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}
// config/db.config.js

const mongoose = require('mongoose')

mongoose.connect('mongodb://127.0.0.1:27017/test')  // 创建数据库