在现代时代,实时地理位置信息管理已经成为了企业和个人必不可少的一部分。这种信息管理是指实时获取、存储、修改和查询用户设备的位置信息。为了实现这一目的,Node.js成为了一款非常有用的开源技术。
Node.js是什么?
Node.js是一个基于Chromium的开源、跨平台技术,它的主要目的是使JavaScript代码的后端逻辑变得更为容易。Node.js使用了 Google V8 JavaScript 引擎,它允许 JavaScript 直接运行在服务器上,提高了解释和执行 JavaScript 代码的速度。
实现步骤
构建一个Node.js服务器
首先,需要创建一个新项目。进入控制台,使用以下命令安装必要的Node.js模块。
npm init -y
接下来,安装Express,Express是一个流行的Node.js框架,它允许您快速构建Web应用程序。
npm install express --save
在项目根目录中创建一个名为“server.js”的新文件,该文件将成为Node.js服务器的入口文件。打开“server.js”文件,并添加以下代码:
const express = require("express"); const app = express(); app.listen(3000, () => { console.log("Server started on port 3000"); });
这个简单的应用程序使用HTTP端口3000启动了一个基本的Express服务器。使用以下命令运行服务器。
node server.js
现在,访问http://localhost:3000,应该会看到“Cannot GET /”消息。
使用PostgreSQL实现数据存储
接下来,设计一个数据存储结构以存储地理位置信息。可以使用非关系型数据库,例如MongoDB。但这里,使用关系型数据库PostgreSQL。
首先,安装“pg”来连接PostgreSQL数据库。可以使用以下命令进行安装。
npm install pg --save
在创建数据库之前,需要为应用程序添加“dotenv”和“cors”中间件,并将可以使用的环境变量添加到“GraphQL”。
首先,使用以下命令安装“dotenv”和“cors”:
npm install dotenv cors --save
打开“server.js”并添加以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- ----- ------ - ------------------ ----- ---- - ---------------- ---------------- ---------------- ------------------------ ---------------------------- --------- ----- ---- ---------------- -- -- - ------------------- ------- -- ---- ------- ---
在“server.js”文件添加以下数据库连接和创建表语句代码:
-- -------------------- ---- ------- ----- - ---- - - -------------- ----- ---- - --- ------ ----------------- ------------------------- ---- - ------------------- ------ -- --- -- ------ ----- ----------- ------- ----- -- --- ------ -------- - -- ------ ------- ---- -------- ----- --- ----- --------- ----- --- ----- --------- --------- --- ---- ------- ----- ---- ----- -- - -- ----- - ------------------- - ---- - ------------------ -------- ---------- - - --
上面的代码创建一个名为“location”的表,该表存储了每个设备的位置信息。
要使用PostgreSQL,请将数据库URL添加到环境变量中。在项目根目录下创建一个名为“.env”的新文件,并将以下内容添加到文件中:
DATABASE_URL=postgres://username:password@localhost:5432/dbname
将该文件中的“username”,“password”和“dbname”替换为您的PostgreSQL凭据。现在,应在PostgreSQL中创建数据库并将上面的URL更改为正确的值。
设计GraphQL的数据模型和API
有了数据表,现在就可以设计用于处理和查询数据库中位置信息的GraphQL API了。GraphQL(Graph Query Language)是一种查询语言,允许客户端指定返回的数据。GraphQL是一种强类型访问数据语言,自动验证查询的结构和类型。
首先,使用以下命令安装GraphQL:
npm install express-graphql graphql --save
打开“server.js”文件并添加以下代码:
-- -------------------- ---- ------- ----- - ----------- - - ------------------- ----- - ----------- - - --------------------------- ----- ------ - ------------- ---- ----- - ------------ ------ -------- ---------- ---------- - ---- -------- - --------------------- ------- ---------- -------- -------- - ---- -------- - --- ---- --------- ------ ---------- ------ ---------- ------- - --- ----- ---- - - --------- -- -- -- -- - ------ --- ----------------- ------- -- - ----------- ------- - ---- -------- ----- -- - ---- ----- ----- -------- -- - -- ----- - ------------ - ---- - ------------------------- - - -- --- -- ---------- -- -- - ------ --- ----------------- ------- -- - ------------------ - ---- -------- ----- -- --------- ------ ----- -------- -- - -- ----- - ------------ - ---- - ---------------------- - --- --- -- ------------ -- --------- --------- -- -- - ------ --- ----------------- ------- -- - ----------- ------- ---- -------- ---------- ---------- ------ ---- --- --------- --- --------- ---------- ----------- ---------- ----------- ----- -------- -- - -- ----- - ------------ - ---- - ------------------------- - - -- --- -- -- -------- ----------- ------------- ------- ------- ---------- ----- --------- ----- -- --
上述代码定义了一个名为“schema”的GraphQL架构,该架构定义了处理和查询位置信息的API的类型和结构。GraphQL架构由类型和根级别解析器组成。解析器是API的工作代码,每个便令都有一个解析器处理。
location(id: Int!): Location
:这个解析器会将ID作为参数,并返回一个名为“Location”的对象, laterlocations: [Location]
:这个解析器会返回一个包含所有位置信息的名为“Location”的数组。setLocation(latitude: Float!, longitude: Float!): Location
:这个解析器将一个名为“Location”的对象插入到数据库中。
浏览器访问http://localhost:3000/graphql可以测试API。
查询位置信息
为了查询位置信息,需要使用“GraphiQL”界面构建GraphQL查询。以下是一个基本的GraphQL查询:
{ locations { id latitude longitude createdAt } }
此查询将返回一个包含所有位置信息的数组。在运行查询之前,使用“GraphQL”插件确认GraphQL API已启动。可以使用以下命令启动API和GraphQL插件:
npm install express-graphql --save
现在,使用以下命令启动API:
node server.js
使用以下URL,http://localhost:3000/graphql,在浏览器中点击“GraphiQL”或输入以下查询,并点击右侧的“Run”按钮。
{ locations { id latitude longitude createdAt } }
实时位置信息
最后,要实现实时位置信息,使用WebSocket是非常有用的。通过添加WebSocket,客户端可以与服务器建立长期连接,并保持开放状态。
首先,需要安装WebSocket模块。可以使用以下命令进行安装。
npm install ws --save
打开“server.js”文件并添加以下代码:
-- -------------------- ---- ------- ----- --------- - -------------- ----- -- - --- ------------------ --------- ---- --- ------------------- -------- -- - ------------------- ------------ -- ---- --- -------- --------- -- --- --- ---------- ------------------ - ---- -------- ----- -- --------- ------ ----- -------- -- - -- ----- - ------------------- - ---- - ------------------------------------------ - --- -- ------ --- --- -------- --- --------- ----- ----- - ------- --------------- ----------------- ----- -- - -- ----- - ------------------- - ---- - -------------------- --------- -- ----------- -------------------- ------ -- - --------------------- --- --------- -- ------ ----- -------- - ----------------- --- - ----------- ------- ---- -------- ---------- ---------- ------ ---- --- --------- --- --------- ---------- ----------- ------------------- -------------------- ----- -------- -- - -- ----- - ------------------- - ---- - ----- -------- - ---------------- --------------------- --- --------- -- ---------- --------------------------- -- - -- ------------------ --- --------------- - ---------------------------------------- - --- - - -- - ----- ----- - ------------------- - --- - --- --- -- --- --------- -- ---- ------ ----- ------ - ---------------- -- -- - ------------------- ------- -- ---- ------- --- -------------------- --------- ------- ----- -- - ------------------------- ------- ----- -------- -- - --------------------- ------- --------- --- ---
上述代码在Express服务器上启动了WebSocket。当新连接与服务器建立连接时,WebSocket服务器为先前的客户端发送所有现有位置信息。接下来,WebSocket服务器将等待新位置信息,并将新位置信息插入到PostgreSQL数据库中。
用以下代码测试WebSocket客户端:
-- -------------------- ---- ------- ----- ------ - --- --------------------------------- ------------- - ------- -- - ---------------------- -- ------- -- -------------- - ------- -- - ---------------------- -- --------- -- ---------------- - ------- -- - ------------------------------------ --
使用以下示例代码,可以为地图创建客户端,该客户端更新所有新位置和实时位置。
-- -------------------- ---- ------- --------- ----- ----- ---------- ------ ----- --------------- -- ----- ---------------------------- ----------------- -- ----- --------------- ---------------------------- ------------------ -- --------------- --- ---------------- ------- ---- - ------- ------ - -------- ------- ------ ---- --------------- -------- ----- --- - ----------------- ----- ------ - --- --------------------------------- ------------- - ------- -- - ---------------------- -- ------- -- -------------- - ------- -- - ---------------------- -- --------- -- ---------------- - ------- -- - ----- ---- - ----------------------- ------------------- -- - ----- ------ - --- --------------------------- --------- - ---- ------------------ ---- ------------------ -- ---- ---- --- --- -- --------- ------- -------
通过WebSocket发送位置信息:
const location = { latitude: 37.422, longitude: -122.084 }; socket.send(JSON.stringify(location));
该应用程序将通过WebSocket从编辑应用程序接收实时位置信息,并在地图上显示此位置。
结论
通过此应用,将了解:
- 如何使用Node.js构建服务器
- 如何访问PostgreSQL数据库
- 如何使用GraphQL架构API
- 如何使用WebSocket实现实时位置信息
这个应用程序可以与编辑应用程序一起使用,例如类似Uber的应用程序进行合作,并通过WebSocket接收地理位置信息。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67496e6da1ce0063545ef8ef