安装nodejs + postman + phpstudy + vscode
创建项目
-
创建文件夹nodejs(项目名称)
-
文件夹内创建src/app.js
// app.js const express = require('express') const bodyParser = require('body-parser') const app = express() // 跨域处理 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With"); res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); res.header("X-Powered-By",' 3.2.1') if(req.method=="OPTIONS") res.send('200');/*让options请求快速返回*/ else next(); }); // 处理body传参 app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) // 子路由 const login = require('./api/login') const user = require('./api/user') app .use(user) .use(login) app.listen(3000, () => { console.log('服务器开启127.0.0.1:3000') })
-
安装express + mysql + mysql2 + body-parser + sequelize + sequelize-cli + nodemon (-dev)
-
初始化sequelize-cli: https://sequelize.org/master/manual/migrations.html
/config/: 数据库的配置
/migrations/: 数据库迁移文件
/models/: 模型文件夹,每一个js文件会和sql表关联
/seeders/: 初始化脚本,每一个表的初始化数据
-
数据库创建:sequelize_demo
-
配置config/config.json
{
"development": {
"username": "root", // 账号
"password": "******", // 密码
"database": "sequelize_demo", // 数据库名
"host": "127.0.0.1", // 地址
"dialect": "mysql", // 语法
"timezone": "+08:00" // 中国:时区加8小时
},
"test": {
//...
},
"production": {
//...
}
}
- 创建模型文件:
npx sequelize-cli model:generate --name user --attributes name:String
User: 模型名称,根据模型创建表时,系统会自动将表名复数化:模型名user —> 表名users
attributes: 模型的属性,相当于数据库的字段和字段类型
这会在models文件夹内创建一个user.js文件,在migrations创建一个对应的js文件(数据库迁移js文件)
- 在app.js中引入模型
const models = require(’…/models’)
调用:models.user, 调用user模型
调用:models.Sequlize,调用Sequlize类
调用:models.sequlize,调用sequlize实例
上面的调用都是自动生成的
- 持久化,创建mysql表:
npx sequelize-cli db:migrate --env=development
–env=development: --env后面跟的是环境,对应config/config.json里面的字段,此命令会根据migrations的js文件创建表(先删后建)
生成的表名称会多一个s,即users
- 配置nodemon,自定义启动命令
// package.jcon文件
"scripts": {
"dev": "nodemon src/app.js"
},
控制台运行
npm run dev
就可以自动重启nodejs
若不配置上面参数,可以直接通过nodemon src/app.js
启动nodejs
- 生产环境及运维(服务器端支持)
pm2: 集群
安装:npm install -g pm2
初始化:pm2 init
生成文件ecosystem.config.js
module.exports = {
apps : [{
name: 'test', // 自定义名称
script: './src/app.js', // 启动文件
instances: 1, // 实例个数(线程,nodejs是单线程的,但是在多核下可以实现多线程)
autorestart: true, // 服务异常的时候自动重启
watch: false, // 生产环境关掉
max_memory_restart: '1G',
env: { // 启动环境
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}],
};
启动:
pm2 start ecosystem.config.js
重启:pm2 reset (id)
日志:pm2 log
停止:pm2 stop (id)
列出所有进程/应用:pm2 list
id替换成all,表示全部执行