我写的代码恰好是本教程的显示方式,因此无法使用

时间:2019-06-09 12:26:26

标签: node.js localhost

所以我写了这个youtube网站上https://www.youtube.com/watch?v=NA21dUBfJhw&list=PL4cUxeGkcC9gcy9lrvMJ75z9maRw4byYp&index=33的教程中确切显示的所有代码(以及基于我的计算机的所有正确路径URL)教程(除了这个人不费力地写 const http = require('http') 以及其他用于localhost的东西,所以我在代码中添加了它。 下面是我的代码(与本教程的代码+本地主机设置完全相同)

下面的代码是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 个答案:

答案 0 :(得分:2)

您创建了两个服务器,一个使用http模块,另一个使用Express,但是您仅侦听http服务器。

只需将“ server.listen”功能移到todoController(app)之后,然后将“ server”更改为“ app”即可

import React from { react }
import Card from "./Card"

const CardList = ({ robots }) => {
  //const cardComponent=robots.map((user,i)=>{
  return (
    // key prop should have something that should not be changed
    <div>
      {
        robots.map((user, i) => {
          <Card
            key={i}
            id={robots[i].id}
            name={robots[i].name}
            email={robots[i].email} />
        })
      }
    </div>
  )
}

export default CardList

在这种情况下,您的服务器将收听Express。

答案 1 :(得分:1)

您创建了2台服务器,因此httpexpress无法在同一端口上侦听。

要确定将使用的明确主机名和端口,请尝试以下操作:

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");
});