You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遵循YouTube教程编写Todo项目代码(含本地服务配置)却无法运行,求助

你的Todo应用无法运行的核心问题及修复方案

先帮你梳理代码里几个关键的问题,一步步来修复:

1. 原生HTTP服务器与Express的冲突

你手动添加了原生http模块创建服务器,但Express框架本身已经封装了HTTP服务器的功能,同时启动两个服务器会导致端口占用或者服务异常。完全可以移除原生http的代码,用Express自带的app.listen()来启动服务。

2. 模板字符串语法错误

你原来的console.log用了单引号包裹模板字符串,模板字符串必须用**反引号()**才能解析${}`变量,否则会直接输出字符串内容。

3. 缺少表单解析中间件

你的todoController里有POST路由,但没有处理表单提交的请求体,需要添加express.urlencoded()中间件来解析表单数据(因为你用的是传统表单提交)。

4. 静态文件路径优化

你设置app.use(express.static('./'))会把整个项目目录暴露为静态资源,存在安全风险,建议只指定Public文件夹作为静态资源目录,这样更规范。


修复后的完整代码:

app.js

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

// 解析表单请求体
app.use(express.urlencoded({ extended: true }));

app.set('view engine', 'ejs');
// 只暴露Public文件夹作为静态资源
app.use(express.static('./Public'));

todoController(app);

// 用Express自带的listen启动服务
const hostname = '127.0.0.1';
const port = 3000;
app.listen(port, hostname, () => {
  // 用反引号包裹模板字符串
  console.log(`Server running at http://${hostname}:${port}/`);
});

todo.ejs

调整CSS路径(因为静态资源指向了Public文件夹,所以直接写/styles.css即可):

<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="/styles.css" rel="stylesheet" type="text/css">
</head>
<body>
  <div id="todo-table">
    <form action="/todo" method="POST">
      <input type="text" name="item" placeholder="Add new item..." required />
      <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(可选:添加POST请求的基础处理)

module.exports = function(app) {
  app.get('/todo', function(req, res){
    res.render('todo');
  });

  // 处理表单提交的POST请求
  app.post('/todo', function(req, res){
    console.log('收到新的todo项:', req.body.item);
    // 这里可以后续添加保存到数据库的逻辑
    res.redirect('/todo'); // 重定向回todo页面
  });

  app.delete('/todo', function(req, res){
    // 后续实现删除逻辑
    res.send('删除请求已接收');
  });
};

运行步骤:

  1. 确保已经安装了依赖:npm install express ejs
  2. 启动服务:node app.js
  3. 访问http://127.0.0.1:3000/todo就能看到你的Todo页面了

内容的提问来源于stack exchange,提问作者Mike Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:12:33