![](/img/trans.png)
[英]How to deploy nodejs expressjs app in Azure with CI/CD?
[英]how to deploy ExpressJS in TypeScript to Azure?
我正在尝试使用此快速生成器为 API 服务创建快速服务器:
生成器表达无压力打字稿
我可以使用npm run dev
在本地运行 Express 服务器。
我可以运行npm run compile
以在 dist 文件夹中创建生产版本。
dist 文件夹产品 package 可以使用npm run start
而没有问题。
但是,我未能将应用程序部署到我的 Azure 服务器。 我已按照此 Microsoft 文档,使用 Visual Studio Code 将 Express.js 部署到 Azure 应用服务。 经过所有步骤,当我浏览应用程序时,它显示You do not have permission to view this directory or page.
我可以参考任何文章或文件吗? 谢谢你的帮助。
package.json scripts
部分默认由generator-express-no-stress- typescript 创建
"scripts": {
"start": "node dist/index.js",
"compile": "ts-node build.ts && tsc",
"dev": "nodemon server/index.ts | pino-pretty",
"dev:debug": "nodemon --exec \"node -r ts-node/register --inspect-brk\" server/index.ts | pino-pretty",
"lint": "eslint -c .eslintrc.js \"{server, test}/**/*.{js,ts,tsx}\" --quiet",
"lint:fix": "eslint -c .eslintrc.js \"{server, test}/**/*.{js,ts,tsx}\" --quiet --fix",
"test": "mocha -r ts-node/register test/**/*.ts --exit",
"test:debug": "mocha -r ts-node/register --inspect-brk test/**/*.ts --exit"
},
我终于弄清楚我的 package 和部署出了什么问题。 在这里,我将分享我的发现。
当我再次查看此 Microsoft 教程文档时,我发现在他们的示例项目中,根文件夹中有一个 web.config 文件
参考这个链接: https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/web.config
它说“如果 iisnode 用于在后面运行节点进程,则需要此配置文件”
我将相同的文件复制到我的项目中,我的项目是由这个生成器生成的: generator-express-no-stress-typescript
我对我的项目做了什么:
npm run compile
将产品构建编译到dist
文件夹index.js
,改为dist/index.js
<handlers>
<!-- Indicates that the server.js file is a node.js site to be handled by the iisnode module -->
<add name="iisnode" path="dist/index.js" verb="*" modules="iisnode"/>
</handlers>
......
<rule name="DynamicContent">
......
<action type="Rewrite" url="dist/index.js"/>
</rule>
毕竟,我再次将应用程序部署到 Azure,现在日志文件错误消息已更改。 现在它显示类似“无效的端口号,应在 0 - 65xxx 范围内”
it seems Azure port number environment is not a number, it is a pipe string: https://www.geekwithopinions.com/2013/12/09/node-js-and-azure-is-it-a-port-or -管道/
但是,生成的 index.ts 逻辑,由于它是 TypeScript,逻辑 parseInt 为端口,并导致错误。
// server/index.ts
......
const port = parseInt(process.env.PORT ?? '3000');
export default new Server().router(routes).listen(port);
为了快速测试,我只是想证明 Express Server 如何在 Azure 上工作,所以我不想修复 TypeScript 逻辑。 相反,我直接修改了npm run compile
生成的编译js文件, tsc
生成的文件dist/index.js
由Azure执行:
// const port = parseInt((_a = process.env.PORT) !== null && _a !== void 0 ? _a : '3000');
const port = (_a = process.env.PORT) !== null && _a !== void 0 ? _a : '3000';
exports.default = new server_1.default().router(routes_1.default).listen(port);
再次部署,它现在可以工作了:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.