用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 后查看