创建一个nodejs服务

1.第一步

1.1.创建一个文件
	mkdir <文件名>
	
1.2.进入文件
	cd <文件名>
	
1.3.初始化项目
	npm init
	
	在src/app.js中创建一个服务
	const http=require('http');
	const server=http.createServer((request,response)=>{
		response.end('hello world!');
	})
	server.listen(端口号,域名地址,()=>{
		
	});
	
1.4.安装Nodemon用于监听node项目中文件的变化,并重启服务 -D (开发环境)
	npm install nodemon -D
	
	"scripts": {
	  "dev": "nodemon node ./src/app.js"
	},
	
1.5.创建一个nodemon.json配置文件,指定特殊的watch监听对应变化的文件
	{
		"watch":["./src/**/*.*"]
	}

1.6.创建一个git代码时的忽略文件(.gitignore忽略规则文件)
	# 忽略依赖包
	node_modules
	
备注:什么是web应用?
      服务器(web应用)--》数据库(服务器对数据库的应用)

2.第二步

2.1.安装express -S (生产环境)
    npm install express -S 
    安装好express之后在src/app.js中删除原来添加的代码
	使用
	const express=require("express");
	
	//创建一个express实例
	const app=express();
	
	app.get('/',(request,response)=>{
		response.json({
			name:'我是一条测试数据'
		})
	})
	
	app.listen(8899,()=>{
		console.log('server 启动成功')
	})

3.添加中间件


4.添加路由router

4.1.

5.mysql数据库

5.0.sequelize是什么?
Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, SQLite 和 Microsoft SQL Server. 
它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能.

5.1.为您选择的数据库手动安装驱动程序
npm install mysql2 -S # MySQL

5.2.要连接到数据库,您必须创建一个 Sequelize 实例,安装sequelize
npm install sequelize -S

5.3.安装sequelize-cli
npm install sequelize-cli -D

5.4.初始化项目
npx sequelize-cli init
初始化成功后生成的文件
config:链接数据库的配置文件,它告诉 CLI 如何连接数据库
migrations:数据库迁移文件
models:项目中操作数据表的文件
seeders:初始化脚本

5.5.创建模型(即:在本地建表)
npx sequelize-cli model:generate --name 模型名 --attributes 属性值 例如(firstName:string,lastName:string,email:string)

5.6.运行迁移,向数据库中插入表 --env=环境 如(开发:development;生产:production)
npx sequelize-cli db:migrate --env=development

5.7.向数据库中插入数据
//引入数据库模型
const models=require('../models');
//向数据库中插入数据
app.get('/create',async (req,res)=>{
	let {name,address}=req.query;
	//promise user-->sequelize 对象
	let user=await models.User.create({
		name,
		address
	})
	console.log("[]",user);
	res.json({
		msg:'请求成功',
		data:null,
		code:"200"
	})
})
//查询全部数据
app.get('/list',async (req,res)=>{
	let list =await models.User.findAll();
	res.json({
		msg:'请求成功',
		data:{
			list:list
		},
		code:"200"
	})
})
//查询单条数据
app.get('/detail/:id',async (req,res)=>{
	let {id}=req.params;
	let datail=await models.User.findOne({
		where:{
			id
		}
	})
	res.json({
		msg:"请求成功",
		data:{
			datail
		},
		code:"200"
	})
})
//修改数据
app.post("/update/:id",async (req,res)=>{
	let {id}=req.params;
	let {name,address}=req.body;
	
	console.log("[]",name,address)
	await models.User.update({
		name:name,
		address:address
	},{
		where:{
			id:id
		}
	})
	res.json({
		msg:"请求成功",
		data:null,
		code:"200"
	})
})

6.后台接收参数的方式

6.1.form-data格式数据
	安装依赖包:npm install express-formidable
	在app.js中引入:const formidable = require('express-formidable') // 引入
					app.use(formidable());  // 中间件
	通过req.fields 接收数据

6.2.x-www-form-urlencoded格式数据
	使用内置依赖包:app.use(express.urlencoded({ extended: false }))
	
6.3.JSON格式数据
	使用内置依赖包:app.use(express.json());

7.解决跨域请求

7.1.安装依赖
	npm install cors -S
	在app.js中引入
	const cors =require("cors");
	app.use(cors());

8.项目的发布和运维

8.1.什么是pm2?
pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能

1、 pm2需要全局安装
npm install -g pm2

进入项目目录初始化pm2文件
pm2 init
生成文件ecosystem.config.js

运行项目
pm2 start ecosystem.config.js

{
    "apps": [{
        "name": "express_api",                             // 项目名          
        "script": "src/ap.js",                      // 执行文件
        "cwd": "./",                                // 根目录
        "args": "",                                 // 传递给脚本的参数
        "interpreter": "",                          // 指定的脚本解释器
        "interpreter_args": "",                     // 传递给解释器的参数
        "watch": true,                              // 是否监听文件变动然后重启
        "ignore_watch": [                           // 不用监听的文件
            "node_modules",
            "logs"
        ],
        "exec_mode": "cluster",                // 应用启动模式,支持fork和cluster模式
        "instances": 1,                             // 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max
        "max_memory_restart": '1G',                    // 最大内存限制数,超出自动重启
        "error_file": "./logs/app-err.log",         // 错误日志文件
        "out_file": "./logs/app-out.log",           // 正常日志文件
        "merge_logs": true,                         // 设置追加日志而不是新建日志
        "log_date_format": "YYYY-MM-DD HH:mm:ss",   // 指定日志文件的时间格式
        "min_uptime": "60s",                        // 应用运行少于时间被认为是异常启动
        "max_restarts": 30,                         // 最大异常重启次数,即小于min_uptime运行时间重启次数;
        "autorestart": true,                        // 默认为true, 发生异常的情况下自动重启
        "cron_restart": "",                         // crontab时间格式重启应用,目前只支持cluster模式;
        "restart_delay": "60"                      // 异常重启情况下,延时重启时间(以毫秒为单位)。默认值为0
        "env": {
           "NODE_ENV": "production",                // 环境参数,当前指定为生产环境 process.env.NODE_ENV
           "REMOTE_ADDR": ""               // process.env.REMOTE_ADDR
        },
        "env_dev": {
            "NODE_ENV": "development",              // 环境参数,当前指定为开发环境 pm2 start app.js --env_dev
            "REMOTE_ADDR": ""
        },
        "env_test": {                               // 环境参数,当前指定为测试环境 pm2 start app.js --env_test
            "NODE_ENV": "test",
            "REMOTE_ADDR": ""
        }
    }]
}

2、进入项目根目录
2.1 启动进程/应用 pm2 start bin/www 或 pm2 start app.js

2.2 重命名进程/应用 pm2 start app.js --name wb123

2.3 添加进程/应用 watch pm2 start bin/www --watch

2.4 结束进程/应用 pm2 stop www

2.5 结束所有进程/应用 pm2 stop all

2.6 删除进程/应用 pm2 delete www

2.7 删除所有进程/应用 pm2 delete all

2.8 列出所有进程/应用 pm2 list

2.9 查看某个进程/应用具体情况 pm2 describe www

2.10 查看进程/应用的资源消耗情况 pm2 monit

2.11 查看pm2的日志 pm2 logs

2.12 若要查看某个进程/应用的日志,使用 pm2 logs www

2.13 重新启动进程/应用 pm2 restart www

2.14 重新启动所有进程/应用 pm2 restart all

在这里插入图片描述

app.js

const express=require("express");
const path = require('path');
const cors =require("cors");
//创建一个express实例
const app=express();
app.use(cors());

//引入路由
const loginRouter=require('./routes/login.js');
const addressRouter=require('./routes/address.js');

//解析传递参数
app.use(express.urlencoded({ extended: false }));

//引入数据库模型
const models=require('../models');
//向数据库中插入数据
app.get('/create',async (req,res)=>{
	let {name,address}=req.query;
	//promise user-->sequelize 对象
	let user=await models.User.create({
		name,
		address
	})
	console.log("[]",user);
	res.json({
		msg:'请求成功',
		data:null,
		code:"200"
	})
})
//查询全部数据
app.get('/list',async (req,res)=>{
	let list =await models.User.findAll();
	res.json({
		msg:'请求成功',
		data:{
			list:list
		},
		code:"200"
	})
})
//查询单条数据
app.get('/detail/:id',async (req,res)=>{
	let {id}=req.params;
	let datail=await models.User.findOne({
		where:{
			id
		}
	})
	res.json({
		msg:"请求成功",
		data:{
			datail
		},
		code:"200"
	})
})
//修改数据
app.post("/update/:id",async (req,res)=>{
	let {id}=req.params;
	let {name,address}=req.body;
	
	console.log("[]",name,address)
	await models.User.update({
		name:name,
		address:address
	},{
		where:{
			id:id
		}
	})
	res.json({
		msg:"请求成功",
		data:null,
		code:"200"
	})
})
//删除数据
app.delete('/delete/:id',async (req,res)=>{
	let { id } =req.params;
	await models.User.destroy({
		where:{
			id:id
		}
	})
	res.json({
		msg:'请求成功',
		data:null,
		code:'200'
	})
})


//注册路由
app.use('/login',loginRouter);
app.use('/address',addressRouter);

//内置中间件-注册静态文件
app.use('/static',express.static(path.join(__dirname,'public')))

//异常处理的中间件
function error_handler_middleware(err,req,res,next){
	if(err){
		res.status(500).json({
			msg:'请求接口异常'
		})
	}else{
		next()
	}
}
app.use(error_handler_middleware);

//路由请求错误
app.use(function (req, res, next) {
  res.status(404).send({
	  code:'404',
	  data:null,
	  msg:"Sorry can't find that!"
  })
})    





app.listen(8899,()=>{
	console.log('server 启动成功')
	console.log("Local:http://127.0.0.1:8899")
})

routes/address.js

const express=require("express");
const models=require("../../models");

const Router=express.Router();

Router.post('/create',async (req,res)=>{
	console.log("[]",req)
	let {province,city,area}=req.body;
	await models.Address.create({
		province,city,area
	})
	res.json({
		msg:'请求成功',
		data:null,
		code:"200"
	})
})

module.exports=Router;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值