Node JS和AngularJS - 找不到脚本和链接 - 404

时间:2017-08-10 12:58:45

标签: javascript html angularjs node.js openshift

我正在尝试使用Openshift 2构建Node.js / AngularJS应用程序。服务器正在成功运行,如果我去本地地址,我得到index.html(但是因为它没有加载css而空白),我无法获得index.html上的脚本和链接,我收到错误404但我不知道为什么。

文件夹结构:

sw [sw master]
    pages
         index.html
         inicio.html
    css
         inicio.css
    js
         angular.js 
         aplicacion.js                                      
    app.js
    start.js

app.js

const http         = require('http'),
      fs           = require('fs'),
      path         = require('path'),
      contentTypes = require('./utils/content-types'),
      sysInfo      = require('./utils/sys-info'),
      env          = process.env;

let server = http.createServer(function (req, res) {
  let url = req.url;
  if (url == '/') {
    url += '/index.html';
  }

  // IMPORTANT: Your application HAS to respond to GET /health with status 200
  //            for OpenShift health monitoring

  if (url == '/health') {
    res.writeHead(200);
    res.end();
  } else if (url == '/info/gen' || url == '/info/poll') {
    res.setHeader('Content-Type', 'application/json');
    res.setHeader('Cache-Control', 'no-cache, no-store');
    res.end(JSON.stringify(sysInfo[url.slice(6)]()));
  } else {
    fs.readFile('./pages' + url, function (err, data) {
      if (err) {
        res.writeHead(404);
        res.end('Not found');
      } else {
        let ext = path.extname(url).slice(1);
        if (contentTypes[ext]) {
          res.setHeader('Content-Type', contentTypes[ext]);
        }
        if (ext === 'html') {
          res.setHeader('Cache-Control', 'no-cache, no-store');
        }
        res.end(data);
      }
    });
  }
});

server.listen(env.NODE_PORT || 3000, env.NODE_IP || 'localhost', function () {
  console.log(`Application worker ${process.pid} started...`);
});

的index.html

<!DOCTYPE html>
<html lang="es" data-ng-app="TFG">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Página principal</title>

        <script src="../js/angular.js"></script>
        <script src="../js/app.js"></script>    
        <link href="../css/inicio.css" rel="stylesheet" />

    </head>

    <body>  

        <!--CUERPO-->
        <div data-ng-view></div>

    </body>
</html>

1 个答案:

答案 0 :(得分:0)

运行服务器的Node.js脚本将从页面文件夹中呈现html。此index.html具有通过文件夹结构的相对路径链接的css和js,但是当它尝试获取资源时,您需要公开公开它以便浏览器访问它。您将需要一些代码来提供静态内容。

实际上,您自己的代码是将404返回为浏览器尝试从您的pages文件夹中获取资源(css和js)并且找不到它们的URL。

 fs.readFile('./pages' + url, function (err, data) {
      if (err) {
        res.writeHead(404);
        res.end('Not found');
      }

您应该包含一些返回css和js文件的代码。