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

如何使用Node.js本地运行AngularJS 1应用?

问题排查与解决方案

首先,先揪出你Express代码里的一个明显语法错误——app.get('*')这行的逗号位置错了,这会导致通配符路由根本没正确注册,甚至可能让服务器运行异常。先把这个核心问题修复:

var express = require('express');
var bodyParser = require('body-parser');
var path = require('path');
var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));

// 静态文件服务:将dist目录设为静态资源根目录
app.use(express.static(path.join(__dirname, 'dist')));

// 修复语法错误:通配符路由要正确绑定回调函数
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'dist/index.html'));
});

// 已有的Mock API示例
app.get('/test', function(req, res){
  res.send('It worked!!!');
});

app.listen(5000);
console.log('Server is running');

接下来解决静态文件404的问题,分两种情况处理:

  • 情况1:components文件夹在dist目录内
    先确认你的dist文件夹结构确实存在components/angular-bootstrap/ui-bootstrap-tpls.js这个路径。如果路径没问题,修复上面的语法错误后,静态资源应该就能正常访问了。要是还是不行,可以显式指定静态资源的挂载路径,确保匹配页面里的引用:

    app.use('/', express.static(path.join(__dirname, 'dist')));
    
  • 情况2:components文件夹在dist目录外(比如项目根目录的bower_components)
    你需要给bower的组件目录单独配置静态服务,让页面里的components/xxx路径能映射到实际的bower文件夹:

    // 先配置dist的静态服务
    app.use(express.static(path.join(__dirname, 'dist')));
    // 把bower_components目录映射到页面请求的/components路径
    app.use('/components', express.static(path.join(__dirname, 'bower_components')));
    

    这样页面里的<script src="components/angular-bootstrap/ui-bootstrap-tpls.js"></script>就能正确访问到对应文件了。

最后说下Mock API的扩展实现:
你已经有了/test的Mock接口,要扩展更多接口很简单,注意把Mock接口的路由定义放在通配符路由app.get('*', ...)之前,不然会被通配符路由拦截,返回的是index.html而不是Mock数据。举个例子:

// Mock获取用户列表的接口
app.get('/api/users', (req, res) => {
  res.json([
    {id: 1, name: 'Alice'},
    {id: 2, name: 'Bob'}
  ]);
});

// Mock提交用户数据的接口
app.post('/api/users', (req, res) => {
  const newUser = req.body;
  // 这里可以模拟存储逻辑
  res.json({status: 'success', data: newUser});
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:42:17