如何使用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
相关产品推荐
相关产品推荐

