Я написал код именно так, как показывает учебник, и он не работает - PullRequest
0 голосов
/ 09 июня 2019

Итак, я написал весь учебник с указанным кодом (со всеми правильными URL-адресами на основе моего компьютера) с этого сайта YouTube: https://www.youtube.com/watch?v=NA21dUBfJhw&list=PL4cUxeGkcC9gcy9lrvMJ75z9maRw4byYp&index=33 (за исключением того, что этот парень не стал писать const http = require ('http') и другие вещи для локального хостинга, поэтому я добавил это в свой код. Ниже приведен мой код (который в точности совпадает с кодом учебника + настройка localhosting)

приведенный ниже код app.js

const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');

});

server.listen(port, hostname, () => {
console.log('Server running at http://${hostname}:#{port}/');

});

var express = require('express');

var todoController = require('./todoController');

var app = express();

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

app.use(express.static('./'));

todoController(app);

код ниже todo.ejs

<html>
      <head>
        <title>Todo List</title>
        <script
        src="https://code.jquery.com/jquery-3.4.1.min.js"
        integrity="sha256- 
        CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
        crossorigin="anonymous"></script>
        <link href="/Public/styles.css" rel="stylesheet" 
type="text/css">
      </head>
      <body>
        <div id="todo-table">
          <form>
            <input type="text" name="item" placeholder="Add new 
            item..." require />
            <button type="submit">Add Item</button>
          </form>
          <ul>
            <li>Item 1</li>
            <li>Item 2</li>
            <li>Item 3</li>
          </ul>
        </div>
      </body>
</html>

код ниже todoController.js

module.exports = function(app) {

    app.get('/todo', function(req, res){
        res.render('todo');

    });



app.post('/todo', function(req, res){


});
app.delete('/todo', function(req, res){
});
};

Ответы [ 2 ]

2 голосов
/ 09 июня 2019

Вы создаете два сервера, один с использованием модуля http, а другой с помощью Express, но вы слушаете только http-сервер.

Просто переместите функцию «server.listen» после todoController (app) и измените «сервер "к" приложению "вот так

app.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

, в этом случае ваш сервер будет слушать Express.

1 голос
/ 09 июня 2019

Вы создаете 2 сервера, чтобы http и express не могли прослушивать один и тот же порт.

Чтобы быть уверенным в имени экспресс-хоста и порте, которые он будет использовать, попробуйте следующее:

const myExpress = app.listen(port, hostname, () => {
  const addr = myExpress.address();
  const url = `http://${addr.address}:${addr.port}/`;

  // eslint-disable-next-line no-console
  console.log(`Listening Services on ${url} family ${addr.family}`);
});

Вы получите правильные параметры, используемые Express, а не имя хоста и порт, который вы предоставляете.

Насколько это полезно?Потому что если по какой-либо причине порт занят, узел не всегда будет выходить из строя, но будет искать первый доступный порт.

Проверка пути по умолчанию / к серверу:

app.get("*", function(req, res) {
  console.log("ok default connection to the server works");
  res.send("ok default connection to the server works");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...