2017-02-23 169 views
0

Я пытаюсь обслуживать некоторые статические файлы с использованием чрезвычайно базового сервера node.js. Цель состоит в том, чтобы обслуживать html-файл с тегом скрипта, ссылающимся на файл javascript. При открытии приложения в браузере html рендеринга отлично, проблема связана с файлом js. В браузере js-файл содержит в нем код html, а не код js.Выполнение Javascript-файла с использованием Node.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 КОД (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 КОД (some.js):

console.log("Hello") 

КАТАЛОГ СТРУКТУРА:

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

ответ

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(); 
    } 
    }); 
}); 
+0

Спасибо за ответ, но моя цель состоит в том, чтобы сделать это без рамки. – 2K01B5

+1

Добавил новый пример в мой ответ :) –