当前位置: 首页 > news >正文

html网站建设中源代码江西省水文监测中心

html网站建设中源代码,江西省水文监测中心,正规的代运营公司,奥运会网页设计欣赏让我们在 JavaScript 中创建一个 CRUD rest API,使用:节点.js表达续集Postgres码头工人码头工人组成介绍这是我们将要创建的应用程序架构的架构:我们将为基本的 CRUD 操作创建 5 个端点:创造阅读全部读一个更新删除我们将使用以下…

让我们在 JavaScript 中创建一个 CRUD rest API,使用:

  • 节点.js

  • 表达

  • 续集

  • Postgres

  • 码头工人

  • 码头工人组成


介绍

这是我们将要创建的应用程序架构的架构:

我们将为基本的 CRUD 操作创建 5 个端点:

  • 创造

  • 阅读全部

  • 读一个

  • 更新

  • 删除

我们将使用以下方法创建一个 Node.js 应用程序:

  • 表达为框架

  • 序列化为 ORM

  1. 我们将 Dockerize Node.js 应用程序

  1. 我们将有一个 Postgres 实例,我们将使用 Tableplus 对其进行测试

  1. 我们将创建一个 docker compose 文件来运行这两个服务

  1. 我们将使用 Postman 测试 API


分步指南

这是一个分步指南。

新建一个文件夹

mkdir node-crud-api

步入其中

cd node-crud-api

初始化一个新的 npm 项目

npm init -y

安装依赖项

npm i express pg sequelize
  • express 是 Node.js 框架

  • pg 是与 Postgres 数据库连接的驱动程序

  • sequelize 是 ORM,所以我们避免输入 SQL 查询

创建4个文件夹

mkdir controllers routes util models

使用您喜欢的 IDE 打开文件夹。如果你有 Visual Studio Code,你可以从终端输入:

code .

你现在应该有一个类似于这个的文件夹:

现在让我们开始编码。

数据库连接

在“util”文件夹中创建一个名为“database.js”的文件。

此文件将包含内部配置以允许 Node.js 应用程序和正在运行的 Postgres 实例之间的连接。

填充 util/database.js 文件

constSequelize=require('sequelize');constsequelize=newSequelize(process.env.PG_DB,process.env.PG_USER,process.env.PG_PASSWORD,{host:process.env.PG_HOST,dialect:'postgres',});module.exports=sequelize;

用户模型

在“models”文件夹中创建一个名为“user.js”的文件。

该文件将包含模型,在本例中为具有自动递增 ID、名称和电子邮件的用户。

填充 models/user.js 文件:

constSequelize=require('sequelize');constdb=require('../util/database');constUser=db.define('user',{id:{type:Sequelize.INTEGER,autoIncrement:true,allowNull:false,primaryKey:true},name:Sequelize.STRING,email:Sequelize.STRING});module.exports=User;

控制器

该文件包含所有要执行的函数,以便与数据库交互并具有 4 个基本功能:

在“controllers”文件夹中创建一个名为“users.js”的文件

填充 controllers/users.js 文件

constUser=require('../models/user');// CRUD Controllers//get all usersexports.getUsers=(req,res,next)=>{User.findAll().then(users=>{res.status(200).json({users:users});}).catch(err=>console.log(err));}//get user by idexports.getUser=(req,res,next)=>{constuserId=req.params.userId;User.findByPk(userId).then(user=>{if(!user){returnres.status(404).json({message:'User not found!'});}res.status(200).json({user:user});}).catch(err=>console.log(err));}//create userexports.createUser=(req,res,next)=>{constname=req.body.name;constemail=req.body.email;User.create({name:name,email:email}).then(result=>{console.log('Created User');res.status(201).json({message:'User created successfully!',user:result});}).catch(err=>{console.log(err);});}//update userexports.updateUser=(req,res,next)=>{constuserId=req.params.userId;constupdatedName=req.body.name;constupdatedEmail=req.body.email;User.findByPk(userId).then(user=>{if(!user){returnres.status(404).json({message:'User not found!'});}user.name=updatedName;user.email=updatedEmail;returnuser.save();}).then(result=>{res.status(200).json({message:'User updated!',user:result});}).catch(err=>console.log(err));}//delete userexports.deleteUser=(req,res,next)=>{constuserId=req.params.userId;User.findByPk(userId).then(user=>{if(!user){returnres.status(404).json({message:'User not found!'});}returnUser.destroy({where:{id:userId}});}).then(result=>{res.status(200).json({message:'User deleted!'});}).catch(err=>console.log(err));}

航线

在“routes”文件夹中创建一个名为“users.js”的文件。

填充 routes/users.js 文件

constcontroller=require('../controllers/users');constrouter=require('express').Router();// CRUD Routes /usersrouter.get('/',controller.getUsers);// /usersrouter.get('/:userId',controller.getUser);// /users/:userIdrouter.post('/',controller.createUser);// /usersrouter.put('/:userId',controller.updateUser);// /users/:userIdrouter.delete('/:userId',controller.deleteUser);// /users/:userIdmodule.exports=router;

索引文件

要运行我们的应用程序,我们需要在根级别创建更多文件。这是将由 docker 容器执行的文件。

在根文件夹中,创建一个名为 index.js 的文件

填充“index.js 文件”:

constexpress=require('express');constbodyparser=require('body-parser');constsequelize=require('./util/database');constUser=require('./models/user');constapp=express();app.use(bodyparser.json());app.use(bodyparser.urlencoded({extended:false}));app.use((req,res,next)=>{res.setHeader('Access-Control-Allow-Origin','*');res.setHeader('Access-Control-Allow-Methods','GET, POST, PUT, DELETE');next();});//test routeapp.get('/',(req,res,next)=>{res.send('Hello World');});//CRUD routesapp.use('/users',require('./routes/users'));//error handlingapp.use((error,req,res,next)=>{console.log(error);conststatus=error.statusCode||500;constmessage=error.message;res.status(status).json({message:message});});//sync databasesequelize.sync().then(result=>{console.log("Database connected");app.listen(3000);}).catch(err=>console.log(err));

码头部分

让我们在根级别再创建 3 个文件:

  • .dockerignore(以点开头)

  • Dockerfile(大写字母 D)

  • docker-compose.yml

结构应如下所示:

.dockerignore 将包含一行:

node_modules

Dockerfile

要创建 Docker 镜像,我们需要一个简单但功能强大的文件。这就是所谓的“Dockerfile”(大写字母 D)。我们可能会使用不同的名称,但让我们暂时保持简单。

FROM node:14# Create app directoryWORKDIR /appCOPY package*.json ./RUN npm install# Bundle app sourceCOPY . .EXPOSE 3000CMD [ "node", "index.js" ]

Docker 组合文件

要运行多个服务,一种简单的方法是创建一个名为“docker-compose.yml”的文件

docker-compose.yml 文件:

version:"3.9"services:node_app:container_name:node_appbuild:.image:francescoxx/node_live_appports:-"3000:3000"environment:-PG_DB=node_live_db-PG_USER=francesco-PG_PASSWORD=12345-PG_HOST=node_dbdepends_on:-node_dbnode_db:container_name:node_dbimage:postgres:12ports:-"5432:5432"environment:-POSTGRES_DB=node_live_db-POSTGRES_USER=francesco-POSTGRES_PASSWORD=12345volumes:-node_db_data:/var/lib/postgresql/datavolumes:node_db_data:{}

构建 Docker 镜像并运行 docker 容器

在容器中运行 Postgres

首先,让我们运行 postgres 容器:

docker compose up -d node_db

要检查日志,我们可以键入:

docker compose logs

你应该得到类似于这个的输出:

如果我们看到“数据库系统已准备好接受连接”,我们就可以开始了!

让我们使用 TablePlus 对其进行测试。

单击 + 创建新连接

从 docker-compose.yml 文件复制值。(如果您保留原值,密码为 12345)

构建并运行 Docker 服务

其次,让我们构建我们的 Docker iamge:

docker compose build

最后,让我们启动服务:

docker compose up node_app

这应该是终端上的输出

使用 Postman 测试应用

让我们使用 Postman 测试应用程序。

向 localhost:3000 发出 GET 请求

向 localhost:3000/users 发出 GET 请求

我们应该有一个空数组作为响应

让我们创建 3 个用户:aaa、bbb 和 ccc

让我们再次检查所有用户:

向 localhost:3000/users 发出 GET 请求

我们应该看到 3 个用户:

让我们得到一个用户,例如用户 2

向 localhost:3000/users/2 发出 GET 请求

让我们更新现有用户,例如同一用户 2

使用不同的主体向 localhost:3000/users/2 发出 PUT 请求

最后,让我们删除用户号 3

对 localhost:3000/users/3 进行删除请求

我们还可以使用 TablePlus 检查值

结论

这是一个基本示例,说明如何使用 Node.js、Express、Sequelize、Postres、Docker 和 Docker Compose 构建 CRUD rest API。


文章转载自:
http://overspecialization.jnpq.cn
http://dressguard.jnpq.cn
http://raucity.jnpq.cn
http://antifeminist.jnpq.cn
http://documental.jnpq.cn
http://mississauga.jnpq.cn
http://ripcord.jnpq.cn
http://phototypy.jnpq.cn
http://unsharp.jnpq.cn
http://gpm.jnpq.cn
http://hamous.jnpq.cn
http://servient.jnpq.cn
http://vanishingly.jnpq.cn
http://receipt.jnpq.cn
http://rooklet.jnpq.cn
http://periclase.jnpq.cn
http://archespore.jnpq.cn
http://kilt.jnpq.cn
http://sansculotte.jnpq.cn
http://thesp.jnpq.cn
http://polymorphic.jnpq.cn
http://heartrending.jnpq.cn
http://descensional.jnpq.cn
http://consolette.jnpq.cn
http://gapy.jnpq.cn
http://monodrama.jnpq.cn
http://heterogamy.jnpq.cn
http://proprioceptor.jnpq.cn
http://riotous.jnpq.cn
http://hemacytometer.jnpq.cn
http://rdc.jnpq.cn
http://ferriferous.jnpq.cn
http://platelayer.jnpq.cn
http://english.jnpq.cn
http://tetra.jnpq.cn
http://indolence.jnpq.cn
http://obconic.jnpq.cn
http://draughtboard.jnpq.cn
http://redneck.jnpq.cn
http://cathole.jnpq.cn
http://aliquot.jnpq.cn
http://rouser.jnpq.cn
http://cryosorption.jnpq.cn
http://xerophytism.jnpq.cn
http://romanaccio.jnpq.cn
http://elberta.jnpq.cn
http://unvalued.jnpq.cn
http://trousseaux.jnpq.cn
http://subaltern.jnpq.cn
http://selcall.jnpq.cn
http://harumph.jnpq.cn
http://transferror.jnpq.cn
http://lineprinter.jnpq.cn
http://limmer.jnpq.cn
http://leglet.jnpq.cn
http://russia.jnpq.cn
http://reverential.jnpq.cn
http://komsomol.jnpq.cn
http://ciggy.jnpq.cn
http://echoism.jnpq.cn
http://complicated.jnpq.cn
http://mandate.jnpq.cn
http://gagaku.jnpq.cn
http://penang.jnpq.cn
http://slinky.jnpq.cn
http://giga.jnpq.cn
http://mcmlxxvi.jnpq.cn
http://telemeter.jnpq.cn
http://amuck.jnpq.cn
http://endosteal.jnpq.cn
http://africanization.jnpq.cn
http://satrapy.jnpq.cn
http://darb.jnpq.cn
http://cardioid.jnpq.cn
http://terminating.jnpq.cn
http://nombles.jnpq.cn
http://paroxysmal.jnpq.cn
http://thalamus.jnpq.cn
http://garble.jnpq.cn
http://gonadotropic.jnpq.cn
http://fearsome.jnpq.cn
http://sulfonmethane.jnpq.cn
http://businessman.jnpq.cn
http://telepathically.jnpq.cn
http://dipsomaniac.jnpq.cn
http://righten.jnpq.cn
http://desmotropy.jnpq.cn
http://caliph.jnpq.cn
http://deluxe.jnpq.cn
http://polyelectrolyte.jnpq.cn
http://hypostatization.jnpq.cn
http://furze.jnpq.cn
http://tragi.jnpq.cn
http://coloration.jnpq.cn
http://contactant.jnpq.cn
http://satyarahi.jnpq.cn
http://photokinesis.jnpq.cn
http://trump.jnpq.cn
http://intracellular.jnpq.cn
http://chimneynook.jnpq.cn
http://www.hrbkazy.com/news/73850.html

相关文章:

  • 企业网站设计原则百度移动端排名
  • 无锡工厂网站建设百度广告联盟平台
  • 网站建设的法律依据谷歌关键词搜索工具
  • 做婚庆的网站有哪些内容网建公司
  • 国家企业年报信息公示网官网查询扬州整站seo
  • 武汉网站建设费用seo外链技巧
  • 广州 建网站石家庄线上推广平台
  • 网站开发 高级认证北京效果好的网站推广
  • asp.net做三个网站重庆seo教程搜索引擎优化
  • html5网站开发软件百度高级搜索入口
  • 保险网站程序源码seo专员是做什么的
  • 网站建设招标进入百度官网首页
  • wordpress如何加插件网址seo查询
  • 广州网站搜索排名网址链接查询
  • 做室内设计通常上的网站厦门seo新站策划
  • 用java做的网站有哪些内容优化设计单元测试卷
  • 小朋友做安全教育的网站上海网络排名优化
  • 百竞网站建设seo外链发布技巧
  • 广州 网站制作公司 网络服务百度移动端模拟点击排名
  • 江苏省工程建设信息网佛山百度关键词seo外包
  • 网站服务器怎么做的什么搜索引擎搜索最全
  • 网站建设iis配置一个完整的营销策划方案范文
  • 自己怎么开网站备案网页设计与制作案例教程
  • 抓取网站访客数据原理农产品网络营销方案
  • 天津哪家做网站好青岛自动seo
  • 怎么建网站和网站模块考研比较厉害的培训机构
  • 手机网站 多html河南网站seo
  • 做网站需要交接什么厦门头条今日新闻
  • 免费做app的网站有吗无锡百度竞价推广
  • 付费视频网站开发推广效果最好的平台