【用typescript肝个nodejs服务器和数据库】

发布于:2023-01-16 ⋅ 阅读:(527) ⋅ 点赞:(0)

用typescript肝个nodejs服务器

首先建立一个文件夹:TSnode
执行npm init -y
调整package.json中的配置npm i
在里面创建js文件夹, 调整"main": "./js/Main.js"
配置nodemon
再执行tsc --init
配置"target": "ES5" "module": "commonjs" "declaration": true"declarationMap": true "sourceMap": true "outDir": "./js"
在ts文件夹下建立Main.ts
运行tsc -w
最后就是直接运行npm start运行node即可。
在这里插入图片描述
ts不认识node的api
所以下载一套node的ts库。

"@types/node":"^18.7.3"

搭建简易服务器:

import http, { IncomingMessage, ServerResponse } from "http";
http.createServer(async function(req:IncomingMessage,res:ServerResponse){
    var data:string = await getData(req);

}).listen(3000,()=>{console.log("服务器已开启");})

function getData(req:IncomingMessage):Promise<string>{
    return new Promise(function(resolve,reject){
        var data='';
        req.on("data",(_chunk:any)=>data+=_chunk);
        req.on("end",()=>resolve(data));
    })
}

这时候es5语法就是通过import导入。
在nodo中下在一套这个ts的mysql库。

import http, { IncomingMessage, ServerResponse } from "http";
"mysql": "^2.18.1",
"@types/mysql": "^2.15.21"

构建数据库Model.ts

import mysql, { MysqlError, PoolConnection }  from "mysql";
interface IResolve<T>{
    (value:T|null):void;
}
interface IReject<T>{
    (reason:T):void;
}
export function getConnection():Promise<PoolConnection|null>{
    return new Promise(function(resolve:IResolve<PoolConnection|null>,reject){
        var pool = mysql.createPool({
            "host":"localhost",
            "port":3306,
            "database":"game",
            "user":"root",
            "password":"root",
        });
        pool.getConnection(function(err:MysqlError,connect:PoolConnection){
            if(err){
                resolve(null)
            }else{
                resolve(connect)
            }
        })

    })
}
export function selectAll(connect:PoolConnection):Promise<any|null>{
    return new Promise(function(resolve:IResolve<any>,reject:IReject<MysqlError>){
        connect.query("SELECT * from `user` WHERE 1",function(err:MysqlError,result:any){
            if(err) resolve(null);
            else resolve(result);
        })
    })
}
var connect:PoolConnection|null =await getConnection();
if(!connect){
    res.end("数据库错误");
    return;
}
var list:any|null = await selectAll(connect);
res.end(JSON.stringify(list));

变量需要接口声明!!!!
所有的primose都系要增加泛型。

================================
使用es6,模块化就是type=module 在node中加载外部资源就是require http from “http” 在写正常es6下的类的导出就是export class 
使用es5,模块化就是commonjs ,import http from "http" 导出还是export
================================ 
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到