无法在heroku上托管node.js应用程序。正在显示应用程序错误

时间:2020-08-06 19:49:31

标签: node.js heroku

收听方法

public void Download()
{
    Task.Run(() =>
        {
            HttpWebRequest request = null;
            try
            {
                lock (GlobalLock.Locker)
                {
                    Status = State.SendRequest;
                    request = Info != null ?
                    RequestHelper.CreateHttpRequest(Info, Range.Start, Range.End, BeforeSendingRequest) :
                    RequestHelper.CreateHttpRequest(Url, BeforeSendingRequest);
                    Status = State.GetResponse;
                }
                using (var response = Info != null ? 
                        RequestHelper.GetRangedResponse(Info, Range.Start, Range.End, request, AfterGettingResponse) :
                        request.GetResponse() as HttpWebResponse)
                {
                    ResponseReceived.Raise(this, new ResponseReceivedEventArgs(response));
                    using (var fileStream = File.Create(Range.FilePath))
                    {
                        Status = State.GetResponseStream;

                        var str = response.GetResponseStream();
                        {

                            var buffer = new byte[2048];

                            int bytesRead = 0;
                            while (true)
                            {

                                //lock (GlobalLock.Locker)
                                {
                                            
                                    bytesRead = str.Read(buffer, 0, buffer.Length);
                                    if (Info.ContentSize > 0)
                                        bytesRead = (int)Math.Min(Range.Size - Range.TotalBytesReceived, bytesRead);
                                    if (bytesRead <= 0)
                                            
                                        break;
                                                
                                            
                                    if (stopEmergent)
                                    {
                                        break;
                                                
                                    }
                                    if (Info != null && Info.ContentSize > 0 && Range.IsDownloaded)
                                    {
                                        break;
                                    }
                                    Range.Status = Status = State.Downloading;

                                    fileStream.Write(buffer, 0, bytesRead);

                                    Range.TotalBytesReceived += bytesRead;
                                    ProgressChanged.Raise(this, EventArgs.Empty);
                                }
                            }
                        } 
                    }
                }//System.ObjectDisposedException is here and I don't understand why


                if (Info.ContentSize < 1 || Range.IsDownloaded)
                {
                    Range.Status = Status = State.Completed;
                    Completed.Raise(this, EventArgs.Empty);
                }
                else if (stopEmergent)
                {
                    Range.Status = Status = State.Stopped;
                    Stopped.Raise(this, EventArgs.Empty);
                }
            }
            catch (Exception e)
            {
                if (stopEmergent)
                {
                    Range.Status = Status = State.Stopped;
                    Stopped.Raise(this, EventArgs.Empty);
                }
                else
                {
                    Range.Status = Status = State.Failed;
                    Failed.Raise(this, new ErrorEventArgs(e));
                }
            }
            finally
            {
                if (request != null)
                    request.Abort();
            }
        });
}

Procfile

let port = process.env.PORT;
if (port == null || port == "") 
{port = 3000; }
app.listen(port);

app.listen(port, function() {
  console.log("Server has started successfully!");
});

Package.json

web: node app.js

在heroku上部署应用程序

This is being displayed when I am visiting the specified address in my terminal

在终端中记录错误

{
  "name": "todolist-v1",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "engines": {
    "node": "12.18.0"
  },
  "dependencies": {
    "body-parser": "^1.18.3",
    "ejs": "^2.6.1",
    "express": "^4.16.3",
    "lodash": "^4.17.19",
    "mongoose": "^5.9.26"
  }
}

正在显示以上消息

我是Heroku的新手,对此了解不多。如果有人引导我完成成功的应用程序部署道路,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您两次拨打app.listen。没必要错误代码EADDRINUSE告诉您,您正在尝试侦听已经使用的地址,如果您两次调用app.listen,则会发生这种情况。只需调用一次,就像这样:

let port = process.env.PORT;
if (port == null || port == "") { port = 3000; }

app.listen(port, function() {
  console.log("Server has started successfully!");
});