使用Node.js Express和IISnode在Azure中部署时,如何解决错误HRESULT:0x6d HTTP



当我尝试从联系表单POST时,我的应用程序中不断出现错误。这是最棒的,它在我使用localhost的开发环境中工作(接收电子邮件(。当我从主机桌面将它部署到vm Windows服务器时,它甚至可以接收电子邮件。但当我在Azure Windows Server上部署它时,它就不起作用了,因为我的vm服务器和Azure在安装了node.js和IISnode的IIS中都有相同的设置。对于整个node.js/express和IISnode的开发来说,这是一种新的东西,如果能帮助它工作并解决它,我们将不胜感激。

错误屏幕截图。

web.config

<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="server.js" verb="*" modules="iisnode" />
</handlers>
<!-- <httpErrors existingResponse="PassThrough"> -->
<iisnode nodeProcessCommandLine="C:Program Filesnodejsnode.exe" logDirectory="C:inetpublogsabciisnode" loggingEnabled="true" />
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule"/>
</modules>
<rewrite>
<rules>
<rule name="abc_test">
<match url="api/*" />
<action type="Rewrite" url="server.js" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

server.js

const PORT = process.env.PORT || 3003`
const app = require('./app')
app.listen(PORT, function(){
`console.log("Server Listening On Port: ", PORT);
})

app.js

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));`
app.use(cors({origin: "*"}));
const generalRoutes = require('./api/route/general');
app.use('/'+'abc_backend/api/general/', generalRoutes);
module.exports = app;

一般.js

const express = require('express');
const router = express.Router();
const gController = require('../controller/generalController');
router.post('/contacting', gController.sendingMail);
module.exports = router;

generalController.js

const express = require('express');
const bodyParser = require('body-parser');
const nodemailer = require('nodemailer');
const app = express();
const sendingMail = async(req, res) => {
let user = req.body;
let transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: "aasome.fakemailzz@gmail.com",
pass: "somefakepass"
}
});
let mailOptions = {
from: "contact@somefakedomain.io",
to: "fakename@somefakedomain.com",
subject: "New Contact Message",
html: <b>Name: </b> ${user.userName} <br>
<b>Email: </b> ${user.email} <br>
<b>Phone: </b> ${user.address.postalCode} <br>
<b>Message: </b> ${user.address.city}
};
let info = await transporter.sendMail(mailOptions);
res.send(info);
}
module.exports = {
sendingMail
}

联系服务.ts

export class ContactingService {
public url:string;
constructor(private _http: HttpClient) {
this.url = environment.backendAPIurl + "/general/";
}
contactSubmit(userName: string, email: string, postalCode: string, city: string){
const bodyData = {
userName:userName,
email: email,
address:{
postalCode:postalCode,
city: city
}
}
return this._http.post<any>(this.url +"contacting",bodyData);
}
}

解决了问题。在启用IIS_USr将日志写入web.config中的目录后,查看了错误日志。该错误表明这是谷歌身份验证的问题,在生产服务器上,如果传入的请求服务器不安全/SSL,谷歌将无法工作。

还发现了一个提到相同概念的stackoverflow链接。iisnode在处理请求时遇到错误。HRESULT:0x6d HTTP状态:500 HTTP子状态:1013

单击此链接并使用nodemailer.createTransport({}(中的帐户登录以允许它,即可解决此问题。https://accounts.google.com/b/0/DisplayUnlockCaptcha

最新更新