semtech/mu-javascript-template使用Express 4在JavaScript中编写mu.semte.ch服务的模板。
创建一个新文件夹。添加以下Dockerfile:
dockerFROM semtech/mu-javascript-template LABEL maintainer="***"
在app.js中创建您的微服务:
jsimport { app, query, errorHandler } from 'mu'; app.get('/', function( req, res ) { res.send('Hello mu-javascript-template'); } ); app.get('/query', function( req, res ) { var myQuery = ` SELECT * WHERE { GRAPH <[***]> { ?s ?p ?o. } }`; query( myQuery ) .then( function(response) { res.send( JSON.stringify( response ) ); }) .catch( function(err) { res.send( "Oops something went wrong: " + JSON.stringify( err ) ); }); } ); app.use(errorHandler);
查看Express入门指南以了解如何在Express中构建REST API。
database,该数据库在[***]上暴露SPARQL端点,与其他微服务一致。以下可导入变量可用:
app:可添加路由的Express应用query(query) => Promise:向三元组存储发送查询的函数update(query) => Promise:向三元组存储发送更新的函数uuid() => string:生成随机UUID的函数errorHandler(err, req, res, next):Express的错误处理中间件函数,需在最后加载sparql:用于创建带插值的查询的模板标签sparqlEscapeString(value) => string:在SPARQL中转义字符串的函数sparqlEscapeUri(value) => string:在SPARQL中转义URI的函数sparqlEscapeInt(value) => string:在SPARQL中转义整数的函数sparqlEscapeFloat(value) => string:在SPARQL中转义浮点数的函数sparqlEscapeDate(value) => string:在SPARQL中转义日期的函数,给定值将传递给Date构造函数sparqlEscapeDateTime(value) => string:在SPARQL中转义日期时间的函数sparqlEscapeBool(value) => string:在SPARQL中转义布尔值的函数,给定值将在JavaScript中计算为布尔值(例如,字符串值'0'在JavaScript中计算为false)sparqlEscape(value, type) => string:根据给定类型在SPARQL中转义值的函数,类型必须是'string'、'uri'、'int'、'float'、'date'、'dateTime'、'bool'之一您可以从mu库导入特定属性,或导入整个mu对象。
导入特定变量的示例:
jsimport { app, query } from 'mu'; app.get('/', function( req, res ) { res.send('Hello mu-javascript-template'); } );
导入整个库的示例:
jsimport mu from 'mu'; mu.app.get('/', function( req, res ) { res.send('Hello using full import'); } );
您可以通过在app.js旁包含package.json文件来安装额外依赖。其工作方式与预期一致:只需在package.json的dependencies部分定义包,它们将在构建时自动安装。
可配置以下环境变量:
NODE_ENV(默认:production):取值为"development"或"production",应用启动的环境。在"development"模式下,应用会在更改时热重载。MAX_BODY_SIZE(默认:100kb):请求体的最大大小。参见ExpressJS文档。日志的详细程度可通过以下环境变量配置:
LOG_SPARQL_ALL:记录所有执行的SPARQL查询(读取和更新)(默认true)LOG_SPARQL_QUERIES:记录执行的SPARQL读取查询(默认:undefined),覆盖LOG_SPARQL_ALLLOG_SPARQL_UPDATES:记录执行的SPARQL更新查询(默认undefined),覆盖LOG_SPARQL_ALLDEBUG_AUTH_HEADERS:调试mu-authorization访问控制相关头(默认true)以下值被视为true:["true", "TRUE", "1"]。
在开发模式下运行时,热重载会自动启用。您可以通过在docker-compose.yml中使用正确的链接启动模板,轻松将其嵌入运行中的mu.semte.ch栈。如有需要,开发期间可附加Chrome检查器,提供高级JavaScript调试功能。
开发时,您可以使用模板镜像,将源代码卷挂载到/app并添加到数据库的链接。设置NODE_ENV环境变量为development。服务将在更改时热重载。当在package.json中定义额外依赖时,需要重启容器。
bashdocker run --link virtuoso:database \ -v `pwd`:/app \ -p 8888:80 \ -e NODE_ENV=development \ --name my-js-test \ semtech/mu-javascript-template
在现有mu.semte.ch栈中开发时,最简单的方式是设置开发模式并直接挂载源代码。这便于设置到数据库和调度器的链接。
如有需要,您可以在不同端口上发布微服务,以便无需通过调度器直接访问。在下面的示例中,使用端口8888直接访问服务。我们直接设置源代码路径,确保可以在原始位置开发微服务。
yamlyourMicroserviceName: image: semtech/mu-javascript-template ports: - 8888:80 environment: NODE_ENV: "development" links: - db:database volumes: - /absolute/path/to/your/sources/:/app/
在开发模式下运行时,您可以将Chrome调试器附加到微服务,并像往常一样添加断点。Chrome调试器需要转发端口9229,且服务需运行在开发模式。启动服务后,打开Google Chrome或Chromium,访问chrome://inspect/。
通过docker run运行时,您可以按如下方式访问服务:
bashdocker run --link virtuoso:database \ -v `pwd`:/app \ -p 8888:80 \ -p 9229:9229 \ -e NODE_ENV=development \ --name my-js-test \ semtech/mu-javascript-template
现在打开Chromium,访问chrome://inspect/。服务启动后,本地主机上会出现一个远程目标。
在mu.semte.ch栈中运行时,您可以挂载源代码并连接到已知微服务,如下所示:
yamlyourMicroserviceName: image: semtech/mu-javascript-template ports: - 8888:80 - 9229:9229 environment: NODE_ENV: "development" links: - db:database volumes: - /absolute/path/to/your/sources/:/app/
现在打开Chromium,访问chrome://inspect/。服务启动后,本地主机上会出现一个远程目标。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务