node + TS服务端开发实践

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 主要技术栈:框架选择express,TS语言开发,TS在JS基础上增加了多种数据类型,包括其提供的接口编程、类型检查等特性,非常适合编写一套简单的服务端程序。

主要技术栈:框架选择express,TS语言开发,TS在JS基础上增加了多种数据类型,包括其提供的接口编程、类型检查等特性,非常适合编写一套简单的服务端程序。

运行:ts-node + webpack + gulp

部署:webpack + pm2 / supervisor

全局安装Typescript即拥有一个编译器,可以使用tsc编译TS(ts后缀)为浏览器识别的原生js,使用"tsc -w"即可监听目录变化自动编译,源目录及输出目录等配置在项目根目录下tsconfig.json进行配置。

但是以上并不太适合实际开发中使用,我最终选择的方案为ts-node作为实例化编译器,开发模式下可在package.json配置"dev": "ts-node-dev 相对目录启动文件路径",安装devDependencies下依赖ts-node-dev,这样运行npm run dev即可启动项目并在终端查看实时代码错误检查。

编译生产使用webpack方案

webpack.config.js配置:

'use strict'

const path = require('path');

module.exports = {
    mode:'development',
    target:'node',
    entry:'./src/main.ts', // 启动文件路径
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'server.js',
    },
    module:{
        rules:[
            {
                test: /\.tsx?$/,
                use: [
                    {
                        loader: 'ts-loader',
                        options: {
                            // 加快编译速度
                            transpileOnly: true,
                            // 指定特定的ts编译配置,为了区分脚本的ts配置
                            configFile: path.resolve(__dirname, './tsconfig.json')
                        }
                    }
                ],
                exclude: /node_modules/
            },
        ]
    }
}

package.json配置

"scripts": {
    "dev": "ts-node-dev src/main",
    "build": "node script/set config.json && rm -rf ./dist && webpack && sh script/reverse.sh",
    "serve": "ts-node src/main",
    "start": "webpack --watch"
  },

开发跑 npm run dev 命令
打包跑 npm run build 命令

mian.ts

编写一个实例测试

const express = require('express')
const bodyParser = require('body-parser')
// const path = require('path')
const router = require('./control/router.ts')

const port = process.env.PORT || 8888
const app = express()


app.all('*', (req: any, res: any, next: any) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Content-Type,Authorization');
    res.header('Access-Control-Allow-Methods', '*');
    res.header('Content-Type', 'application/json;charset=utf-8');
    next();
});

app.use((req: any, res: any, next: any) => {
    console.log(req.path)
    next()
})

app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())

app.use(router)

app.listen(port, () => console.log(`devServer start on port:${port}`))

连接mysql数据库

const mysql = require('mysql')
const db = {
        host: 'localhost',
        port: 3306,
        user: 'root',
        password: 'root',
        database: ''
    }
const pool = mysql.createPool(db)

module.exports = {
    connPool(sql: string, val: string, cb: Function) {
        pool.getConnection((error: any, conn: any) => {
            if (error) console.log(error)

            conn.query(sql, val, (err: any, rows: any) => {
                if (err) console.log(err)
                cb(rows)
                conn.release()
            })
        })
    },

    // json格式
    writeJson(res: any, code = 200, msg = 'ok', data = null) {
        const obj = { code, msg, data }

        if (!data) {
            delete obj.data
        }

        res.send(obj)
    },
    // Promise Type
    pConnPool(sql: string, val: string) {
        return new Promise((resolve) => {
            pool.getConnection((error: any, conn: any) => {
                if (error) console.log(error)

                conn.query(sql, val, (err: any, rows: any) => {
                    if (err) console.log(err)

                    resolve(rows)

                    conn.release()
                })
            })
        })
    },
}

完整实例

制作了cli工具封装一个完整实例,可运行:

npm i -g tsn-cli

tsn-cli init <project name>

然后选择服务端模板,等待下载完成即可。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
JSON JavaScript 前端开发
JS服务端技术—Node.js知识点
本篇文章是我开始系统学习Node.js的一些笔记。如果文中阐述不全或不对的,多多交流。
63 0
JS服务端技术—Node.js知识点
|
10天前
|
JavaScript 前端开发 IDE
【TypeScript技术专栏】TypeScript与Node.js后端开发
【4月更文挑战第30天】TypeScript在Node.js后端开发中日益重要,作为JavaScript超集,它提供静态类型检查和面向对象编程,增强代码可靠性和维护性。集成TypeScript能带来类型安全、更好的IDE体验、易于维护的代码以及增强工具支持。通过安装TypeScript编译器、编写TypeScript文件、配置TSconfig,开发者可以在Node.js项目中利用其高级特性,提高代码质量和开发效率。实践案例显示,TypeScript能确保路由处理器的类型正确,降低错误率。随着社区发展,TypeScript成为提升Node.js开发体验的推荐选择。
|
10天前
|
消息中间件 监控 JavaScript
Node.js中的微服务架构:构建与实践
【4月更文挑战第30天】本文探讨了在Node.js中构建微服务的实践,包括定义服务边界、选择框架(如Express、Koa或NestJS)、设计RESTful API、实现服务间通信(HTTP、gRPC、消息队列)、错误处理、服务发现与负载均衡,以及监控和日志记录。微服务架构能提升应用的可伸缩性、灵活性和可维护性。
|
14天前
|
JavaScript 前端开发 关系型数据库
node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染
node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染
24 1
|
14天前
|
JavaScript 前端开发 API
node+vue3+mysql前后分离开发范式——实现对数据库表的增删改查
node+vue3+mysql前后分离开发范式——实现对数据库表的增删改查
36 1
|
16天前
|
Web App开发 JavaScript 前端开发
js开发:请解释什么是Node.js,以及它的应用场景。
Node.js是基于V8引擎的JavaScript运行时,用于服务器端编程。以其事件驱动、非阻塞I/O模型著称,适用于高并发和实时应用。常见用途包括:构建Web服务器、实时应用(如聊天)、API服务、微服务、工具和命令行应用,以及搭配Electron开发桌面软件。
20 1
|
2月前
|
Web App开发 JavaScript 前端开发
js开发:请解释什么是Node.js,以及它的应用场景。
Node.js是基于V8的JavaScript运行时,用于服务器端编程。它的事件驱动、非阻塞I/O模型使其在高并发实时应用中表现出色,如Web服务器、实时聊天、API服务、微服务、工具和跨平台桌面应用(使用Electron)。适用于高性能和实时需求场景。
20 4
|
2月前
|
数据采集 JavaScript 前端开发
利用axios库在Node.js中进行代理请求的实践
利用axios库在Node.js中进行代理请求的实践
|
2月前
|
Web App开发 JavaScript 前端开发
深入浅出:Node.js 在后端开发中的应用与实践
【2月更文挑战第13天】本文旨在探讨Node.js这一流行的后端技术如何在现代Web开发中被应用以及它背后的核心优势。通过深入分析Node.js的非阻塞I/O模型、事件驱动机制和单线程特性,我们将揭示其在处理高并发场景下的高效性能。同时,结合实际开发案例,本文将展示如何利用Node.js构建高性能、可扩展的后端服务,以及在实际项目中遇到的挑战和解决方案。此外,我们还将讨论Node.js生态系统中的重要工具和库,如Express.js、Koa.js等,它们如何帮助开发者快速搭建和部署应用。通过本文的探讨,读者将获得对Node.js在后端开发中应用的深入理解,以及如何有效利用这一技术来提升开发效率
122 2
|
2月前
|
JavaScript 前端开发 Java
如何使用内网穿透实现远程公网访问windows node.js的服务端
如何使用内网穿透实现远程公网访问windows node.js的服务端