问题一 项目构建失败
之前并没有接触过纯node项目或者说接触的比较少,导致对于typescript了解的并不多。
在编写完依靠express建立的mockApi后尝试进行构建以达到在云主机上运行的目的。
运行相应指令后却发生了如下报错:
后来尝试直接运行发现并没有发生错误,可以正常运行。
后经试验发现下面的报错部分猜测是在生命周期结束后都会发生的,比如说如果我们用ctrl+c停止运行中的项目此时结束了生命周期也会发生上面的报错。
那么四舍五入就是没有报错但是并没有生成相应文件。
这是他给出的网址:typescriptlang
根据官网显示 tsc命令的作用如下
# Run a compile based on a backwards look through the fs for a tsconfig.json
tsc
基于backwards look
并通过fs找到tsconfig
来进行编译。
到这里就可以发现问题所在了,当前项目中不存在tsconfig。
根据之前的项目参考加入tsconfig后再执行就没有错误了,可以直接形成对应的js文件。
之前一直都是将tsconfig习惯性的与angular绑定,忽略了它对于typesript的作用。
后来经查询发现:
tsconfig.json是用于配置 TypeScript 编译时的配置选项
我们可以在这里找到它的详细配置信息。
我们在之前学习angular时就了解过typescript的工作原理——先由浏览器编译成JavaScript再实现我们想要的功能。typescript是 JavaScript 的超集,包含了 JavaScript 的所有元素,可以载入 JavaScript 代码运行,并扩展了 JavaScript 的语法。
那么既然都可以运行那么打包的目的是什么呢?我们为什么不可以直接将ts文件拿到云主机上去运行而是要将其编译为js文件,猜测可能是云主机没有相应环境,无法进行编译?或者是可以加快运行速度,刨去了编译时间。
剩余的一些小问题:
POST {{host}}/getHrmdepartmentWithPage
Content-Type: application/x-www-form-urlencoded
params={"curpage":1, "pagesize":20}
我们知道像这种请求如果我们想要通过expres获取其中的参数如curpage等需要去body中获取,但是打印body后发现情况如下:
[Object: null prototype] { params: '{"curpage":1, "pagesize":20}' }
虽然识别到了参数,但是由于前面的null prototype
部分无法直接获取params。
后经查询发现由于express的json模块是依附于body-parser模块,所以需要加载body-parser中间件。
而我们所使用的application/x-www-form-urlencoded
类型数据需要进行如下声明
app.use(bodyParser.urlencoded({extended: true}))
即让我们的程序可以解析 URL-encoded 格式的请求体数据。
相应的,每种数据格式都有其对应的中间件,比如如果我们想接受application/json
格式的数据,那么就需要进行如下声明:
app.use(bodyParser.json())
否则我们得到的数据就会为空。
当我们把项目打包后准备拿去云主机上进行运行发生了如下报错:
报错行:
const express_1 = __importDefault(require("express"));
没有找到相应依赖,起初以为时构建时除了问题,后来查看后建产生的文件发现构建后仍然需要node_modules的依赖,构建并没有将依赖导入。
仍然需要将package.json加入到打包后的文件夹中再进行npm-install。
虽然知道了问题所在,但是在云主机上运行时又出现了问题——云主机网络存在限制,进行npm-install的话会报网络相关错误(没来得及截图),所以我们只能将安装好的node_modules复制到云主机上去。
另外起初认为阿里云云主机是和本地完全分开的,并不能进行文件传输,后来搜索后发现云主机存在对本地磁盘的映射,云主机的内容存于云主机的C盘,而其他盘则用来进行映射,即可以直接在云主机上访问到本机的所有文件。
后来在浏览tsconfig官方文档时发现其中可以声明要打包的文件,具体操作如下:
{
"compilerOptions": {},
"files": [
"core.ts",
"sys.ts",
"parser.ts",
"binder.ts",
"checker.ts",
"tsc.ts"
]
}
官方给出的解释是:
指定要包含在程序中的文件的列表。如果找不到任何文件,则会发生错误。
由此可以合理猜测我们可以把node_modules
也进行打包,从而实现打包后直接运行的效果,但是是否可行还没来得及尝试。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。