10.20 Notes

10.14-10.20 Learning Notes

Sequelize

https://itfun.tv/courses/12

model & tables

模型是单数
表是复数

migrations

models

routes

seeders

Nodejs

https://www.bilibili.com/video/av38925557

自定义模块

要让外部访问模块里面的方法

模块文件中:用exports & module.exports暴露方法

exports与module.exports的不同:

1.exports
./node_modules/nav/nav.js
let str = 'this is /node_modules/nav/nav.js';
exports.str=str;

./useNav.js
console.log(nav);
// { str: 'this is /node_modules/nav/nav.js' }

2.module.exports
./node_modules/nav/nav.js
let str = 'this is /node_modules/nav/nav.js';
module.exports = str;

./useNav.js
console.log(nav);
// this is /node_modules/nav/nav.js'

需要访问模块的文件中:require(‘model’);

require

.js可省略
绝对路径写法:
require('./node_modules/bar/bar.js');  
require('./node_modules/bar/bar');

位于node_modules下的写法: 
require('nav/nav');

配置package.json后的写法:
./node_modules/bar/package.json
  "main": "nav.js"

./useNav.js
require('nav');

nodemon

自动更新代码并运行

npm i nodemon -s
./package.json:
"scripts": {
        "start": "nodemon ./yourFile"
    },
npm start

http

let app = http.createServer(function (req, res) {

    res.writeHead(200, { "Content-Type": "text/html;charset='utf-8'" });
    res.write("hello nodejs");
    res.end();
});
app.listen(3000, '127.0.0.1');
url.parse("www.baidu.com");//地址到对象
url.format({    //对象到地址
    ...
});
url.resolve("http://www.baidu.com", 'news')

fs

fs.stat('httpmodel.js', function (err, stats) {//文件信息
    if (err) {
        console.error(err);
        return false;
    }
    console.log('file:' + stats.isFile());
    console.log('directory:' + stats.isDirectory());
})
fs.mkdir('path',callback)//make directory
fs.writeFile('file','content',callback) //会覆盖原来的
fs.appendFile('file','content',callback) //在文件后面加上去
fs.readFile('t.txt', function (err, data) {
    if (err) {
        console.error(err);
        return false;
    }
    console.log(data.toString());
})
fs.readdir('dir',function(err,data))
fs.rename('./app.js','app/app.js',callback) //改名或剪切
fs.rmdir('dir',callback)//remove directory
fs.unlink('file',callback)//删除文件

find all directories in one directory

//let filesArr = [];
fs.readdir('upload', function (err, files) {
    if (err) {
        console.error(err);
        return false;
    }
    else {
        console.log(files);
        for (let i = 0; i < files.length; i++) //let大法好
            fs.stat(files[i], (err, stats) => {
                console.log(files[i]);
            })
        // (function getFile(i) {      //异步+函数+递归

        //     if (i == files.length) {
        //         console.log(filesArr);
        //         return false;
        //     }

        //     fs.stat('html/' + files[i], function (err, stats) {
        //         if (files[i].isDirectory) {
        //             filesArr.push(files[i]);
        //         }
        //         getFile(i + 1);
        //     })
        // })(0)

    }
})

let & var

http://es6.ruanyifeng.com/#docs/let

for (var i = 1; i <= 3; i++)
    setTimeout(() => {
        console.log(i);
    }, 100);
4
4
4

for (let i = 1; i <= 3; i++)
    setTimeout(() => {
        console.log(i);
    }, 100);
1
2
3

上面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

箭头函数

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
  return num1 + num2;
};

// 正常函数写法
var result = values.sort(function (a, b) {
  return a - b;
});
// 箭头函数写法
var result = values.sort((a, b) => a - b);

Pygame

https://mp.weixin.qq.com/s/Or84egkjMzG3YC8Ed6n1kw

pygame.display.set_mode((width,height))#窗口大小
pygame.display.set_caption()#标题栏
def draw_rect(color, position):#绘制矩形
    pygame.draw.rect(caption, color, pygame.Rect(position[0], position[1], cell, cell))
    #Rect:((x, y), (width, height)) 以(x,y)为左上角,绘制width*height的矩形