Node.js Web应用程序中的NPM错误

时间:2019-04-16 01:19:45

标签: node.js azure npm

我正在尝试从模板创建Web应用。问题是,当我运行该应用程序时,我收到“由于发生内部服务器错误而无法显示该页面”。我做了一些研究,发现我的节点安装有问题。

我尝试重新安装npm,当前版本为1.4.28。错误日志显示:

0信息,如果以“ OK”结束则有效 1个详细的cli ['node', 1个详细的cli'D:\ Program Files(x86)\ npm \ 1.4.28 \ node_modules \ npm \ bin \ npm-cli.js', 1详细cli'init'] 2信息使用npm@1.4.28 3信息使用node@v0.10.40 4错误错误:EINVAL,无效参数 在新套接字上出现4个错误(net.js:157:18) process.stdin发生4错误(node.js:693:19) 读取时出现4个错误(D:\ Program Files(x86)\ npm \ 1.4.28 \ node_modules \ npm \ node_modules \ read \ lib \ read.js:18:36) PromZard.prompt出现4错误(D:\ Program Files(x86)\ npm \ 1.4.28 \ node_modules \ npm \ node_modules \ init-package-json \ node_modules \ promzard \ promzard.js:214:3) PromZard.L出现4错误(D:\ Program Files(x86)\ npm \ 1.4.28 \ node_modules \ npm \ node_modules \ init-package-json \ node_modules \ promzard \ promzard.js:177:21) PromZard.walk出现4错误(D:\ Program Files(x86)\ npm \ 1.4.28 \ node_modules \ npm \ node_modules \ init-package-json \ node_modules \ promzard \ promzard.js:146:5) PromZard.loaded出现4错误(D:\ Program Files(x86)\ npm \ 1.4.28 \ node_modules \ npm \ node_modules \ init-package-json \ node_modules \ promzard \ promzard.js:90:8) PromZard出现4个错误。 (D:\ Program Files(x86)\ npm \ 1.4.28 \ node_modules \ npm \ node_modules \ init-package-json \ node_modules \ promzard \ promzard.js:57:10) fs.js:272:14出现4个错误 Object.oncomplete出现4个错误(fs.js:108:15) 5错误如果您需要帮助,可以报告此 entire 日志, 5错误,包括npm和节点版本,位于: 5错误http://github.com/npm/npm/issues 6错误系统Windows_NT 6.2.9200 7错误命令“节点”“ D:\ Program Files(x86)\ npm \ 1.4.28 \ node_modules \ npm \ bin \ npm-cli.js”“ init” 8错误CWD D:\ home \ site \ wwwroot 9个错误节点-v v0.10.40 10错误npm -v 1.4.28 11错误的系统调用uv_pipe_open 12错误代码EINVAL 13错误errno 18 14详细出口[18,true]

这就是我所拥有的:

Web.config

<configuration>
    <system.webServer>

        <handlers>
            <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module -->
            <add name="iisnode" path="app.js" verb="*" modules="iisnode" />
        </handlers>

        <rewrite>
            <rules>
                <!-- Don't interfere with requests for logs -->
                <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url="^[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$" />
                </rule>

                <!-- Don't interfere with requests for node-inspector debugging -->
                <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">                    
                    <match url="^app.js\/debug[\/]?" />
                </rule>

                <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
                <rule name="StaticContent">
                    <action type="Rewrite" url="public{REQUEST_URI}" />
                </rule>

                <!-- All other URLs are mapped to the Node.js application entry point -->
                <rule name="DynamicContent">
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" />
                    </conditions>
                    <action type="Rewrite" url="app.js" />
                </rule>
            </rules>
        </rewrite>        
    </system.webServer>
</configuration>

App.js

var express = require('express');
var app = express();


app.use('/node_modules',  express.static(__dirname + '/node_modules'));
app.use('/style',  express.static(__dirname + '/style'));
app.use('/script',  express.static(__dirname + '/script'));

app.get('/',function(req,res){
    res.sendFile('home.html',{'root': __dirname + '/templates'});
})

app.get('/showSignInPage',function(req,res){
    res.sendFile('signin.html',{'root': __dirname + '/templates'});
})

app.get('/showSignUpPage',function(req,res){
  res.sendFile('signup.html',{'root':__dirname + '/templates'})
})

app.listen(3000,function(){
    console.log('Node server running @ http://localhost:3000')
});

Server.js

var http = require('http');

http.createServer(function (req, res) {

    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('Hello, world!');

}).listen(process.env.PORT || 8080);

我最初是从server.js获取结果的,但是我做了一些更改以尝试解决该问题以及如何使我什么也没得到。有人能指出我这个问题吗?

谢谢

编辑:添加zip可以做到这一点,创建另一个级别的文件夹,并且我收到消息“您无权查看此目录或页面”。当我尝试运行该应用程序时。

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要更改

app.listen(3000,function(){
    console.log('Node server running @ http://localhost:3000')
});

app.listen(process.env.PORT);

可以通过互联网访问azure webapp的唯一方法是通过已经公开的HTTP(80)和HTTPS(443)TCP端口。

我已经用您的web.config和app.js测试了该项目。我将遇到与您相同的错误。

enter image description here

更改监听端口后,效果很好。您可以参考此article来将您的nodejs应用程序部署到Azure。 enter image description here