1

我在尝试运行我的代码时遇到了这个错误,但我真的不知道如何解决它。我真的不知道代码库,因为我是新手,所以我完全迷路了,不知道该怎么做。

body-parser deprecated undefined extended: provide extended option index.js:20:20
COMMON_CONFIG.mode === "development" false
Listening on port undefined

编辑:包.json:

**{
  "name": "audio-guide-backend",
  "version": "0.0.0",
  "main": "index.js",
  "repository": "https://gitlab.com/islandica/audio-guide-backend.git",
  "license": "MIT",
  "private": true,
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js"
  },
  "dependencies": {
    "crypto-random-string": "^3.0.1",
    "dotenv": "^8.0.0",
    "ejs": "^2.6.2",
    "express": "^4.17.1",
    "express-session": "^1.16.2",
    "pg": "^7.11.0"
  },
  "devDependencies": {
    "nodemon": "^1.19.1"
  }
}
**

编辑 2:这就是我的 index.js 的样子:

require("dotenv").config();
const express = require("express");
const http = require("http");
const session = require("express-session");
const bodyParser = require("body-parser");
const { SERVER_CONFIG } = require("./config");

const app = express();

const server = http.createServer(app);

app.set("view engine", "ejs");

app.use(express.static("public"));
app.use((req, res, next) => {
  // if (req.url === "/api/login") console.log(req);
  next();
});
app.use(express.json());
app.use(bodyParser.urlencoded());
app.use(
  session({
    secret: "keyboard cat",
    resave: false,
    saveUninitialized: true
  })
);

// ROUTES
require("./routes")(app);

// NOT FOUND
app.use(function(req, res, next) {
  res.status(404);

  res.format({
    html: function() {
      res.render("404");
      // res.render("404", { url: req.url });
    },
    json: function() {
      res.json({ message: "Not found" });
    },
    default: function() {
      res.type("txt").send("Not found");
    }
  });
});

// INTERNAL ERROR
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.format({
    html: function() {
      res.render("500");
    },
    json: function() {
      res.json({ message: "server error: " + err.message });
    },
    default: function() {
      res.type("txt").send("server error: " + err.message);
    }
  });
  res.send("server error: " + err.message);
  /*res.render("500", {
    message:
      COMMON_CONFIG.mode === "development"
        ? err.message
        : "Internal server error"
  });*/
});

server.listen(SERVER_CONFIG.port, err => {
  if (err) {
    console.log("Error occured");
  } else {
    console.log(`Listening on port ${SERVER_CONFIG.port}`);
  }
});

看起来我的帖子主要是代码,所以我正在添加更多细节。

4

2 回答 2

2

Listening on port undefined

这意味着您没有设置端口。我看到您正在使用dotenv,因此首先要检查的是.env根目录中的文件。如果没有创建,请创建并添加 index.js 中引用的环境变量的名称。很可能PORT

接下来,您将要查看您正在传递的选项或您正在调用的express.json()任何函数。body-parser它也在传递一个undefined

检查您的 .env 文件或系统环境变量并添加所需的变量。

编辑:

SERVER_CONFIGconfig文件。那就是您应该拥有通常位于 .env 中的环境变量的地方。有可能并且很可能SERVER_CONFIG只消耗 dotenv 包。

此外,您不需要const server = http.createServer(app);只需将调用替换server.listen(...)app.listen(...)

删除 bodyParser,并使用express.urlencoded({extended: true})

于 2019-10-14T17:16:53.470 回答
0

由于 bodyParser 已弃用,我已通过在应用程序上设置 extended:true 选项解决了此问题。

app.use(express.urlencoded({extended: true}));

代替

app.use(bodyParser.urlencoded());
于 2021-11-08T05:10:10.253 回答