我有一个使用IIS托管的快速服务器。我遇到一个问题,我的POST请求全部返回404页。我的GET请求工作正常。
这是我的server.js
const express = require('express');
const cors = require('cors');
const puppeteer = require('puppeteer');
const { createUrl } = require('./urlBuilder');
const app = express();
app.use(express.json());
app.use(cors());
const pdfConfig = {
format: 'A4',
printBackground: true,
margin: {
top: '1cm',
bottom: '1cm',
left: '1.5cm',
right: '1.5cm'
}
};
// Our first route
app.get('/test', function (req, res) {
res.send('Hello Dev!');
});
app.post('/create-pdf', function(req, res) {
const url = createUrl(req.body);
const browser = puppeteer.launch();
browser.then((brw) => {
const page = brw.newPage();
page.then((pg) => {
pg.goto(url).then(() => {
pg.emulateMedia('screen').then(() => {
const buffer = pg.pdf(pdfConfig);
buffer.then((buf) => {
brw.close();
res.end(buf.toString('base64'));
})
})
})
})
});
});
这是我的web.config
<configuration>
<system.webServer>
<!-- indicates that the server.js file is a node.js application
to be handled by the iisnode module -->
<handlers>
<add name="iisnode" path="server.js" verb="*" modules="iisnode" />
</handlers>
<rewrite>
<rules>
<rule name="sendToNode">
<match url="/*" />
<action type="Rewrite" url="server.js" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
如果我使用失眠和GET http://example.com/test之类的REST客户端,它可以正常工作,但POST到http://example.com/create-pdf会返回404。我在这里遗漏了什么吗?
答案 0 :(得分:1)
重写/重定向的默认请求方法始终是GET。对于其他动词重写,需要明确添加它们。
添加与您拥有的规则完全相同的新规则,并将以下条件添加到规则中:
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" />
</conditions>