Angular可以与任何支持http与websocket服务器进行通讯。
首先,我们使用node.js用typescript语言创建一个web服务器。
一、创建web服务器
步骤1
创建一个空的项目,取名为service,名字可以按照情况而取。
使用命令行,npm init -y 作用:进行初始化,增加一个默认的package.json
使用命令行, npm i @types/node --save 作用:引入node.js
但是node.js不认typescript,需要把typescript编译成javascript,
首先,新建一个配置文件,取名为tsconfig.json。
写入以下内容:
{ "compilerOptions": { "target":"es5","module": "commonjs","emitDecoratorMetadata": true,"experimentalDecorators": true,"outDir": "build",//ts转换成js的文件夹 "lib": ["es6"] },"exclude": ["node.modules"] }
其次,想要ctrl+s自动将ts文件转换成js文件,需要对webstorm进行设置file->settings
步骤2
安装express框架,命令行:npm install express --save
使用命令行使能够用typescript语法用express框架,命令行:npm install @types/express --save,这个是express的定义文件
步骤3
启动服务器,命令行:node build/aution_server.js 显示如下则启动成功
node服务器启动后如果发生改变,则不会发生改变,如果要改则需要重新启动服务器,这对开发十分不便。
安装插件则可以做到更新,命令行:npm install -g nodemon
这个插件会监控源代码,如果发生改变会自动加载到服务器。
用这个命令启动项目:nodemon build/aution_server.js
二、Angular项目中使用http进行通讯
通常我们希望在 HTTP 请求的时候,页面不会失去响应,所以我们的 HTTP 请求是异步的。
JavaScript 中,处理异步代码通常有3 种方式:
1.回调(callback)
2.承诺(promise)
3.可观察对象(observable)
1、使用命令行:npm g component [组件名] 实例组件名为product。
在此过程中,(.map)遇到一个问题,报错。
错误信息为:This import is blacklisted,import a submodule instead
引入方法:参考了https://poychang.github.io/an...,import ‘rxjs/Rx’ 仍然是以上错误信息。
提示:TypeError: this.http.get(…).map is not a function
改为'rxjs/add/operator/map' 则正常。可点击错误信息查看原文档。
2、配置angular命令行,发送请求到相对应的服务器
项目根目录新建一个配置文件,这里为proxy.conf.json。注意json中,不用轻易使用注解,有可能造成错误。
需要把这个配置文件配置到项目中,package.json
修改客户端请求路径:
重新使用命令行:npm run start启动客户端angular项目,发现还是无法获取数据,因为客户端发送请求路径为api/products ,故修改web服务器路径为
结果:
到这里,使用nodejs创建web服务器,angular项目客户端使用http访问web服务器就完成了。
注意点:http是异步请求,当你需要用到请求返回值的时候,需要确定使用时值是否已经返回。这里很容易被忽视,导致读值错误,很有可能你使用值的时候,http请求还没有回来。解决的方法应该很多,目前我的做法是把这赋值的语句和http请求在同一线程中执行,即在网络请求线程中执行。