- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 Node/快速 API 项目。我正在尝试通过 Internet 信息服务 (IIS) 运行该项目。我当前在 IIS 中的结构 - 站点 -> 环境(网站) -> project1 | project2(此处为 Node 应用程序)。我将 project2 转换为具有环境应用程序池名称的应用程序。然后我创建应用程序。
我尝试访问我的网址,但返回 403 禁止错误。我已经给了它所有的凭据。不确定为什么会这样。
网络配置
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<!--
By default IIS will block requests going to the bin directory for security reasons.
We need to disable this since that's where Express has put the application entry point.
-->
<security>
<requestFiltering>
<hiddenSegments>
<remove segment="bin" />
</hiddenSegments>
</requestFiltering>
</security>
<handlers>
<!-- Indicates that the www file is a node.js entry point -->
<add name="iisnode" path="app.js" verb="*" modules="iisnode"/>
</handlers>
<!--<rewrite>
<rules>
<rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
<match url="app.js\/debug[\/]?" />
</rule>
<rule name="StaticContent">
<action type="Rewrite" url="public{REQUEST_URI}"/>
</rule>
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="app.js"/>
</rule>
</rules>
</rewrite> -->
<rewrite>
<rules>
<rule name="sendToNode">
<match url="/*" />
<action type="Rewrite" url="app.js" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
应用程序.js
const express = require('express')
const bodyParser = require('body-parser')
const path = require('path')
const cors = require('cors')
const compression = require('compression')
const helmet = require('helmet')
const expressSanitizer = require('express-sanitizer')
const jwt = require('jwt-simple');
const index = require('./routes/index')
const something1 = require('./routes/something1')
const something2 = require('./routes/something2')
const responseTime = require('response-time')
const app = express()
// const app = express.createServer()
const port = 3000
var corsOptions = {
origin: 'http://localhost:8100',
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}
//added security
app.use(helmet())
// //set logger
// app.use(logger)
//cors options
app.use(cors(corsOptions))
//body parser middleware
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: false}))
// Mount express-sanitizer here
app.use(expressSanitizer()) // this line follows bodyParser() instantiations
//set static path
app.use(express.static(path.join(__dirname, 'client')))
// app.use(express.static(path.join(__dirname, '../../www')))
//Use response time
app.use(responseTime())
// set our default template engine to "ejs"
// which prevents the need for using file extensions
app.set('view engine', 'ejs')
//gzip compression
app.use(compression())
//add authorization request header
app.use((req, res, next) => {
if(!req.headers.authorization){
return res.status(403).json({ error: 'No credentials sent!'});
}
// try {
// let token = req.headers.authorization.split(' ')[1]
// var decoded = jwt.decode(token, 'your secret here');
// console.log(decoded, 'decoded')
// } catch (err) {
// console.log('err ', err.stack);
// return res.status(403).json({
// error: 'invalid token'
// });
// }
next();
})
//set views for error and 404 pages
app.set('views', path.join(__dirname, 'views'))
app.use('/', index)
app.use('/something1/v1', something1)
app.use('/something2/v1', something2)
// app.listen(port, () => {
// console.log('server started on port 3000')
// })
//run export NODE_ENV=production
//NODE_ENV=production node app.js
app.listen(process.env.port)
我已经安装了所有东西 - (rewrite/node/iisnode) 只是不知道如何设置它。谢谢
最佳答案
嗯,我认为您在 IIS 中设置网站的方式不太正确。
听起来你的 IIS 结构是这样的:
Sites
└─── environment
└─── project1
└─── project2
| app.js
| web.config
| ...
其中environment
是一个网站,它下面的每个文件夹可能是一个已经转换为application
的文件夹。
这似乎是人们常犯的一个错误,因为 hello world 教程作为应用程序在 Default Web Site
下运行(虽然我不确定为什么会这样,但我猜是因为它不会替换可通过本地主机上的端口 80 轻松访问的默认网站)。这不是设置新 IISNode 网站的最佳方式。
您应该做的是添加一个新站点(右键单击 Sites
并从上下文菜单中选择 Add Website
)。填写必要的详细信息并将 Physical path:
指向您的 app.js
和 web.config
所在的位置。
如果您正确设置了 web.config
,IISNode 应该会处理其余部分。
祝你好运,如果我做出了任何错误的假设,请告诉我。
关于node.js - 不工作 - 在 IIS (iisnode) 上部署 Node 应用程序 - 返回 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49984735/
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
var urlsearch = "http://192.168.10.113:8080/collective-intellegence/StoreClicks?userid=" + userId +
我有一个非常奇怪的问题,过去两天一直让我抓狂。 我有一个我试图控制的串行设备(LS 100 光度计)。使用设置了正确参数的终端(白蚁),我可以发送命令(“MES”),然后是定界符(CR LF),然后我
我目前正试图让无需注册的 COM 使用 Excel 作为客户端,使用 .NET dll 作为服务器。目前,我只是试图让概念验证工作,但遇到了麻烦。 显然,当我使用 Excel 时,我不能简单地使用与可
我开发了简单的 REST API - https://github.com/pavelpetrcz/MandaysFigu - 我的问题是在本地主机上,WildFly 16 服务器的应用程序运行正常。
我遇到了奇怪的情况 - 从 Django shell 创建一些 Mongoengine 对象是成功的,但是从 Django View 创建相同的对象看起来成功,但 MongoDB 中没有出现任何数据。
我是 flask 的新手,只编写了一个相当简单的网络应用程序——没有数据库,只是一个航类搜索 API 的前端。一切正常,但为了提高我的技能,我正在尝试使用应用程序工厂和蓝图重构我的代码。让它与 pus
我的谷歌分析 JavaScript 事件在开发者控制台中运行得很好。 但是当从外部 js 文件包含在页面上时,它们根本不起作用。由于某种原因。 例如; 下面的内容将在包含在控制台中时运行。但当包含在单
这是一本名为“Node.js 8 the Right Way”的书中的任务。你可以在下面看到它: 这是我的解决方案: 'use strict'; const zmq = require('zeromq
我正在阅读文本行,并创建其独特单词的列表(在将它们小写之后)。我可以使它与 flatMap 一起工作,但不能使它与 map 的“子”流一起工作。 flatMap 看起来更简洁和“更好”,但为什么 di
我正在编写一些 PowerShell 脚本来进行一些构建自动化。我发现 here echo $? 根据前面的语句返回真或假。我刚刚发现 echo 是 Write-Output 的别名。 写主机 $?
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我将一个工作 View Controller 类从另一个项目复制到一个新项目中。我无法在新项目中加载 View 。在旧项目中我使用了presentModalViewController。在新版本中,我
我对 javascript 很陌生,所以很难看出我哪里出错了。由于某种原因,我的功能无法正常工作。任何帮助,将不胜感激。我尝试在外部 js 文件、头部/主体中使用它们,但似乎没有任何效果。错误要么出在
我正在尝试学习Flutter中的复选框。 问题是,当我想在Scaffold(body :)中使用复选框时,它正在工作。但我想在不同的地方使用它,例如ListView中的项目。 return Cente
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我有一个组合框,其中包含一个项目,比如“a”。我想调用该组合框的 Action 监听器,仅在手动选择项目“a”完成时才调用。我也尝试过 ItemStateChanged,但它的工作原理与 Action
你能看一下照片吗?现在,一步前我执行了 this.interrupt()。您可以看到 this.isInterrupted() 为 false。我仔细观察——“这个”没有改变。它具有相同的 ID (1
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我正在尝试在我的网站上设置一个联系表单,当有人点击发送时,就会运行一个作业,并在该作业中向所有管理员用户发送通知。不过,我在失败的工作表中不断收到此错误: Illuminate\Database\El
我是一名优秀的程序员,十分优秀!