Node.js作为HTTP服务器和托管AngularJS单页应用程序

15

我有一个使用angularJS编写并由grunt构建的应用程序。是否有一种方法可以从node js创建http服务器并在其中托管它。请分享任何代码片段或文档,以帮助解决这个问题。谢谢。


1
获取一个Node.js教程。如何入门,就这样……你不必在Stack Overflow上提问。 - binariedMe
Rohit,你能分享一个链接吗?我可以获取很多文档并尝试一些代码片段。我可以创建一个服务器,但它没有启动我的应用程序。 - dhana
如果您在配置应用程序时遇到了一些问题,请在此处发布... Node.js 的学习时间比您估计的要长... 因此请保持耐心并尝试更多... 虽然我可以给您一些链接,但我认为您也知道如何自己搜索谷歌... - binariedMe
如果您遇到问题并需要特定错误的帮助,请随时更新问题。目前,问题和评论的写作方式似乎是在寻求教程或其他外部资源的链接,这是 Stack Overflow 的离题之处,因为这些问题会产生大量的主观答案和垃圾邮件。 - Claies
3个回答

17
  1. (简单方法) 如果您没有任何服务器端逻辑,可以通过npm上的http-server模块简单地提供客户端AngularJS/HTML/css。 https://www.npmjs.com/package/http-server 只需通过以下命令安装: $>npm install -g http-server 然后进入您的客户端文件夹,键入http-server并按Enter。

  2. 如果您已编写了服务器端代码(ExpressJS或restify web api),则使用$>nodemon server.js

  3. 如果您正在寻找用于生产应用程序的选项,请考虑使用forever/pm2 https://www.npmjs.com/package/pm2 https://www.npmjs.com/package/forever


1
是的,我也将客户端和服务器分开。我使用http-server运行客户端,使用nodemon/forever运行服务器。当你进入生产环境时,你可以选择在cloudfront/CDN上部署客户端。(如果这个答案对你有用,请按右键接受答案)。 - Anand
我知道这是一个非常老的帖子。但是,您如何使客户端代码显示正确的CSS/样式? - sdd

5

在您的app.js文件中使用以下代码。

var express = require('express');

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

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static(path.join(__dirname, 'public')));

/* GET home page. */
app.get('/', function(req, res, next) {
  //Path to your main file
  res.status(200).sendFile(path.join(__dirname+'../public/index.html')); 
});

module.exports = app;

使用node app.js命令来运行app.js文件。


谢谢,正是我需要的。我猜我应该把整个Angular应用程序放在public/文件夹中。 - Bosak
1
在这种方法中,您不能使用URL进行路由。也就是说,您可以浏览您的Angular应用程序的页面,但如果您重新加载页面,则会从您的Node.js应用程序获得404错误,而不是路由到Angular应用程序的页面。 - Nijeesh Joshy

0

这个例子对我来说适用于任何情况

即使你有基础URL或没有

{{link1:源代码在这里}}

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
/**
 * This server should host angular appliation with or without base-url
 * The angular static resources should be under `./public`
 */
var app = express();
app.use(function(req, res, next) {
  console.log('Time:', Date.now() + ":", req.originalUrl)
  next()
})
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/base-here-if-any', express.static(path.join(__dirname, 'public')))

app.get('*', function(req, res, next) {
  //Path to your main file
  res.status(200).sendFile(path.join(__dirname + '/public/index.html'));
});


const port = 3000


app.listen(port, () => console.log(`Example app listening on port ${port}!`))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接