指向nodejs服务的HTML页面中静态资源的链接无效

时间:2018-01-06 14:45:40

标签: html css node.js

我在nodejs项目中得到了这样的目录结构

I am serving <code>login_nimda.html</code> from <code>nimda.js</code>

这是我的login_nimda.html代码段与CSS链接:

enter image description here

我从login_nimda.html投放nimda.js,但关联的CSS文件未加载。

正如您所看到的,我使用了根相对路径,但我仍然没有得到任何结果。我必须使用CDN for Bootstrap并且无法使用下载的文件的原因相同。

应该是怎么回事?我在哪里弄错了链接的href属性?

编辑: 这是我的nimda.js代码段,用于提供HTML文件login_nidma.html

router.get('/', function( req, res){
    let html = fs.readFileSync(path.join(__dirname,'../static/login_nimda.html'));
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(html);
});

3 个答案:

答案 0 :(得分:1)

您还需要提供静态文件(例如.css文件)。

您可以使用Express的内置中间件来提供静态文件express.static()

这是基本的例子:

// serve static files in "app/static" with your node.js server
app.use('/static', express.static('app/static'))

现在,您可以在/static中的浏览器(以及HTML文件中)访问它们:

<link href="/static/css/login_nimda.css" rel="stylesheet"> 

请在此处详细了解express.static()及其用法:http://expressjs.com/en/starter/static-files.html

答案 1 :(得分:1)

  1. 使用express.static中间件提供静态文件,而不是:

    router.get('/', function( req, res){
        let html = fs.readFileSync(path.join(__dirname,'../static/login_nimda.html'));
        res.writeHead(200, {'Content-Type': 'text/html'});
        res.end(html);
    });
    

    https://expressjs.com/en/starter/static-files.html

    不要忘记您可以使用path模块和__dirname变量(请参阅 this SO question )来帮助告诉express.static(...)您的静态文件的确切位置是

  2. 如果您想在不同文件中app.use(express.static(...))倍数,则需要确保将中间件应用于同一个app实例。 I've created a code sample to illustrate. server.js#L10 中,我将var app传递到routes.js模块(相当于您的nimda.js {1}})。在 routes.js#L4 中,我在与.use()中创建的var app相同的server.js上呼叫app.use(express.static(...))。在您的server.jsnimda.js中使用var app = express()的重构版本中,我猜测您在每个文件中都创建了一个新的routes.js (这是我们想要避免的事情)。

  3. 我不建议您将静态资产分成两个不同的位置,就像您已经想象的那样,除非您有充分的理由这样做。 Keeping them in one central location 可确保我们甚至不需要单独的nimda.js(又名idx = df1.index.union(df2.index).union(df3.index) print (idx) Index(['2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017'], dtype='object', name='year') )文件,从而帮助您降低应用的复杂程度目前您需要的功能。

答案 2 :(得分:0)

如果您使用的是Express,则根本不必处理对静态内容的请求。 Express会自动返回你的静力学。只需使用路径和路径和文件夹结构。如

app.use(&#39; / my_statics&#39;,express.static(__ dirname +&#34; / public&#34;));

如果你在 /public/assets/css/a.css 下面有一个c.c

http://example.com/my_statics/assets/css/a.css

如果您在 /public/assets/b.html 下面有b.html工作

http://example.com/my_statics/assets/b.html

编辑:我为我的sideproject DataEndpoints建立了类似的设置。检查 app.js 是否有静态和路由器设置。还要检查路由器文件夹以查看如何处理,您可能需要查看 views 文件夹下的如何设置静态文件链接