使用Node.js

时间:2017-02-23 09:43:24

标签: javascript html node.js

我尝试使用极其基本的node.js服务器提供一些静态文件。目的是使用引用javascript文件的脚本标记来提供html文件。 在浏览器中打开应用程序时,html呈现正常,问题在于js文件。在浏览器中,js文件中包含html代码,而不是js代码。

SERVERC代码:

var http = require('http')
var fs = require('fs')

var port = 3000;

var app = http.createServer(function(req, res){
    var html = fs.createReadStream('./index.html')

    html.pipe(res);
})

app.listen(port, function(){
    console.log('Listening on port ' + port)
})

HTML CODE(index.html):

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Hello</title>
 </head>
 <body>
  <h1>Hello</h1>
  <script src="./some.js"></script>
 </body>
</html>

JAVASCRIPT CODE(some.js):

console.log("Hello")

目录结构:

|-index.html
|-some.js
|-app.js(server)

1 个答案:

答案 0 :(得分:3)

我建议您按以下方式为需要提供的文件创建目录

|-public
    |-index.html
    |-some.js
|-app.js(server)

然后使用express.static来提供您创建的目录。

var express = require('express');
var app = express();
var path = require('path');
var port = 3000;

app.use(express.static(path.join(__dirname, 'public')));

app.listen(port, function(){
   console.log('Listening on port ' + port)
})

然后你就跑了

node app.js

如果不使用快递,您可以执行以下操作

var http = require('http');
var fs = require('fs');
var path = require('path');

http.createServer(function (request, response) {

    var filePath = '.' + request.url;
    if (filePath == './')
       filePath = './index.html';

    var extName = path.extname(filePath);
    var contentType = 'text/html';
    switch (extName) {
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
    }

    path.exists(filePath, function(exists) {

    if (exists) {
        fs.readFile(filePath, function(error, content) {
            if (error) {
                response.writeHead(500);
                response.end();
            }
            else {
                response.writeHead(200, { 'Content-Type': contentType });
                response.end(content, 'utf-8');
            }
        });
    }
    else {
        response.writeHead(404);
        response.end();
    }
  });
});