node.js写后台搭建的一个图书管理系统知识点总结

1、遇到的问题

向数据库插入一条记录,插入失败,但是Ajax请求接口以后不成功,不走succeess函数,试过了也不走error函数。

要向用户提示,数据插入失败,直觉是靠return,但是发现请求总会进入Ajax代Ajax({})内部,所以用flag。

                var flag=true
                var loans_url = "/loans/";
                var query_url = base_url + loans_url;
                $.ajax({
                    url: query_url,
                    type: "post",
                    data: data,
                    success: function (res) {    
                       flag=false  
                       console.log(flag)  //false
                      window.location.href="loandetail.html"                          
                    } 
                })   
                console.log(flag)   //true
                if(flag){
                alert("User or book does not exist") 
                } 

但是发现在请求函数外,flag还是true。

原因:ajax请求是异步请求。会发生在alert之后。解决:改为同步请求,加一行代码

  async:false,

2、数据去重

   var ary = [];
        function dynamicAddUser(data) {
           for (var i = 0; i < ary.length; i++) {
              if (ary.indexOf(data.id)!==-1) {
                   return;
               }
           }
            ary.push(data.id);
//对本条数据进行展示
}

除了用indexOf,还可以用

if (ary[i]==data.id) {
               return;
               }

3、给动态元素绑定事件

 var spanA = document.createElement("span");
                var spanB = document.createElement("span");
                $(spanA).text("modify");
                spanA.style.marginRight = "20px"
                $(spanB).text("delete")
                $(spanA).click(sel);
                $(spanB).click(del);
                spanA.style.cursor = "pointer";
                spanB.style.cursor = "pointer";
                tdNodeOper.appendChild(spanA);
                tdNodeOper.appendChild(spanB);

在js里面写函数即可。

function sel() {
            var userid = $(this.parentNode).attr("uid");
            window.location.href = "modifyUser.html?id=" + userid;

        }

        function del() {
            var userid = $(this.parentNode).attr("uid");
            var users2_url = "/users/" + userid;
            var query_url = base_url + users2_url;
            $.ajax({
                url: query_url,
                type: "delete",
                success: function (res) {
                    window.location.href = "user.html"
                }
            })
        }

del()删除函数:需要携带userid。

sel():修改本条数据,先把id带到modify页面。在modify页面接收参数。

var userid = location.search.split('=')[1];
        const base_url = "http://127.0.0.1:3000";
        var users_url = "/users/" + userid;
        var query2_url = base_url + users_url;
        $.ajax({
            url: query2_url,
            type: "get",
            success: function (res) {
                $("#name").val(res.name);
                $("#barcode").val(res.barcode);
                $("#type").val(res.memberType)

            }
        })

第一个可以取到userid,之后根据userd请求本条数据,在渲染到页面。

4、node.js给数据库中添加表,一定先在data.js里面定义如下:

const Sign = sequelize.define("Sign", {
    name: Sequelize.STRING,
    password: Sequelize.INTEGER
});

然后可以在route.js定义访问数据的接口。

const express = require("express");
const router = express.Router();
const db = require("../data");
const ret = require("../lib/return");

router.post("/", function(req, res) {
    db.Sign.create({
        name: req.body.name,
        password: req.body.password,
    }).then(function(sign) {
        ret.json(sign, res);
    });

    });

    router.get("/", function(req, res) {  
        db.Sign.findAll().then(function(sign) {
            ret.json(sign, res);
        });
    });

    module.exports = router;

5、sqlite3数据库需要根据一条数据的一个name进行查询,本来已经有一个根据主键id进行本条数据查询,现在需要根据Snumber学号来进行查询。

router.get("/:uid", function(req, res) {  
    db.User.findByPk(req.params.uid).then(function(user) {
        if (user) {
            res.end( ret.json(user, res));

        } else {
            res.end();
        }
    });
});

router.get("/:Snumber", function(req, res) {
    db.User.findOne({ where: { Snumber: req.params.Snumber } }).then(function(user) {
        ret.json(user, res);
    });
});

根据主键id查询,可以查到本条数据,我自己用findOne方法根据snumber查询到本条数据,发现只要输入/2019(2019为学号)数据库查询始终把2019赋给id,所以一直返回空。后来想通了,第二个和第一个的请求url一样。只会执行第一个,永远不会执行第二个。

改为

router.get("/:Snumber/s", function(req, res) {
    db.User.findOne({ where: { Snumber: req.params.Snumber } }).then(function(user) {
        ret.json(user, res);
    });
});

只要在请求uil上加一个/s,标识一下,则可以查询到这条数据。

猜你喜欢

转载自blog.csdn.net/runner_123/article/details/86423903