【发布时间】:2018-10-03 17:09:16
【问题描述】:
我有一个 node/express API 项目。我正在尝试通过 Internet 信息服务 (IIS) 运行该项目。我在 IIS 中的当前结构 - 站点 -> 环境(网站) -> project1 | project2(此处为节点应用程序)。我将 project2 转换为具有环境应用程序池名称的应用程序。然后我创建应用程序。
我尝试点击我的网址,但我收到了 403 禁止错误。我已经给了它所有的凭据。不确定为什么会这样。
web.config
<?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>
app.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) 只是不知道如何设置它。谢谢
【问题讨论】:
-
您是否尝试过设置简单的 hello world 程序而不是完整的应用程序...使用更少的 web.config...一旦它工作您可以继续使用它,那么您将了解确切的 root阻止您运行应用程序的原因...
-
是的,我能够使用网站作为源而不是该网站中的应用程序来使其工作。这就是问题所在。
标签: node.js express iis deployment web-deployment