Reputation: 7008
I have a simple html page with angular js as follows:
//Application name
var app = angular.module("myTmoApppdl", []);
app.controller("myCtrl", function ($scope) {
//Sample login function
$scope.signin = function () {
var formData =
{
email: $scope.email,
password: $scope.password
};
console.log("Form data is:" + JSON.stringify(formData));
};
});
HTML file:
<html>
<head>
<link href="bootstrap.min.css" rel="stylesheet" type="text/css"/>
</head>
<body ng-app="myTmoApppdl" ng-controller="myCtrl">
<div class="container">
<div class="form-group">
<form class="form" role="form" method="post" ng-submit="signin()">
<div class="form-group col-md-6">
<label class="">Email address</label>
<input type="email" class="form-control" ng-model="email" id="exampleInputEmail2" placeholder="Email address" required>
</div>
<div class="form-group col-md-6">
<label class="">Password</label>
<input type="password" class="form-control" id="exampleInputPassword2" ng-model="password" placeholder="Password" required>
</div>
</form>
<button type="submit" class="btn btn-primary btn-block">Sign in</button>
</div>
</div>
</body>
<script src="angular.min.js" type="text/javascript"></script>
<!--User defined JS files-->
<script src="app.js" type="text/javascript"></script>
<script src="jsonParsingService.js" type="text/javascript"></script>
</html>
I am new to node js. I have installed node js server in my system but I am not sure how to run a simple html file using node js?
Upvotes: 58
Views: 246608
Reputation: 41
Express route handler for serving the 'home.html' file when the '/home' endpoint is accessed
app.get('/home', (req, res) => {
__dirname returns the directory name of the current module (the script file). This line sends the 'home.html' file as the response when the '/home' endpoint is accessed
res.sendFile(__dirname + '/home.html');
});
Upvotes: 1
Reputation: 1
Let us take an example,
My HTML file (test.html)
<html>
<body>
<h1> Hello World </h1>
</body>
</html>
Just c++ has libraries we have modules in Node.js, These modules can be very helpful for doing different processes using Node.js If you dont have any idea about modules in Node.js i will suggest you to read following article : https://www.w3schools.com/nodejs/nodejs_modules.asp
Here we are going to use two modules [http] for creating server and [fs] for opening our html file assuming which is located in same folder of our app.js file, now let us see app.js code:
var http = require('http'); // Import the http module
var fs = require('fs'); // Import the fs (filesystem) module
// Create an HTTP server
http.createServer(function(req, res) {
// Read the contents of the file 'test.html'
fs.readFile('test.html', function(err, data) {
if (err)
{
// If there's an error reading the file, send a 500 error response
res.writeHead(500, {'Content-Type': 'text/plain'}); // Set the response header
res.write('Error: Unable to load file'); // Write the error message
return res.end();
}
// If the file is read successfully, send the file content as the response
res.writeHead(200, {'Content-Type': 'text/html'}); // Set the response header
res.write(data); // Write the file content
return res.end(); // End the response
});
}).listen(8080); // The server listens on port 8080
Thank you !! I hope this should resolve your issue :)
Upvotes: 0
Reputation: 13
If you want to run the html file in your browser then you can do following steps:
step 1 --> You need to create server and listen on some port
step 1 eg --->
app.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}/`);
});
step 2 --> You can make the route like /
or /profile
for your html webpage
step 2.1 --> Now in this route you can use sendFile
function in node js
step 2.1 eg --->
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
Upvotes: 1
Reputation: 11
const http = require('http');
const fs = require('fs');
var mimeTypes = {
"html": "text/html",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"js": "text/javascript",
"css": "text/css"
};
var server = http.createServer((req, res) => {
if (req.url === '/') {
res.writeHeader(200, { "Content-Type": "text/html" });
fs.createReadStream('./public/index.html').pipe(res)
}
var filesDepences = req.url.match(/\.js|.css/);
if (filesDepences) {
var extetion = mimeTypes[filesDepences[0].toString().split('.')[1]];
res.writeHead(200, { 'Content-Type': extetion });
fs.createReadStream(__dirname + "/public" + req.url).pipe(res)
}
})
server.listen(8080);
Upvotes: 0
Reputation: 366
In order to deploy a html pages via Node JS project, For example to deploy an Angular build file where the all the requests needed to be redirected to index.html in that case we can use the wild card route of node js to serve the Angular project but we need to make sure that there are no naming conflicts of Angular route and Node js API route.
app.js
//Angular App Hosting Production Build
app.use(express.static(__dirname + '/dist/ShoppingCart'));
// For all GET requests, send back index.html (PathLocationStrategy) (Refresh Error)
app.get('*', (req,res) => {
res.sendFile(path.join(__dirname, '/dist/ShoppingCart/index.html'));
});
Upvotes: 1
Reputation: 1474
http access and get the html files served on 8080:
>npm install -g http-server
>http-server
if you have public (./public/index.html) folder it will be the root of your server if not will be the one that you run the server. you could send the folder as paramenter ex:
http-server [path] [options]
expected Result:
*> Starting up http-server, serving ./public Available on:
http://LOCALIP:8080
Hit CTRL-C to stop the server
http-server stopped.*
Now, you can run: http://localhost:8080
will open the index.html on the ./public folder
references: https://www.npmjs.com/package/http-server
Upvotes: 5
Reputation: 10571
The simplest command by far:
npx http-server
This requires an existing index.html at the dir at where this command is being executed.
This was already mentioned by Vijaya Simha, but I thought using npx is way cleaner and shorter. I am running a webserver with this approach since months.
Docs: https://www.npmjs.com/package/http-server
Upvotes: 7
Reputation: 505
Move your HTML file in a folder "www". Create a file "server.js" with code :
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/www'));
app.listen('3000');
console.log('working on 3000');
After creation of file, run the command "node server.js"
Upvotes: 13
Reputation: 1
This is a simple html file "demo.htm" stored in the same folder as the node.js file.
<!DOCTYPE html>
<html>
<body>
<h1>Heading</h1>
<p>Paragraph.</p>
</body>
</html>
Below is the node.js file to call this html file.
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(req, resp){
// Print the name of the file for which request is made.
console.log("Request for demo file received.");
fs.readFile("Documents/nodejs/demo.html",function(error, data){
if (error) {
resp.writeHead(404);
resp.write('Contents you are looking for-not found');
resp.end();
} else {
resp.writeHead(200, {
'Content-Type': 'text/html'
});
resp.write(data.toString());
resp.end();
}
});
});
server.listen(8081, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8081/');
Intiate the above nodejs file in command prompt and the message "Server running at http://127.0.0.1:8081/" is displayed.Now in your browser type "http://127.0.0.1:8081/demo.html".
Upvotes: 2
Reputation: 431
Just install http-server globally
npm install -g http-server
where ever you need to run a html file run the command http-server
For ex: your html file is in /home/project/index.html
you can do /home/project/$ http-server
That will give you a link to accessyour webpages:
http-server
Starting up http-server, serving ./
Available on:
http://127.0.0.1:8080
http://192.168.0.106:8080
Upvotes: 34
Reputation: 211
I too faced such scenario where I had to run a web app in nodejs with index.html being the entry point. Here is what I did:
node init
in root of app (this will create a package.json file)npm install --save express
(save will update package.json with express dependency)server.js
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public')); //__dir and not _dir
var port = 8000; // you can use any port
app.listen(port);
console.log('server on' + port);
do node server
: it should output "server on 8000"
start http://localhost:8000/ : your index.html will be called
File Structure would be something similar
Upvotes: 21
Reputation: 887
You can use built-in nodejs web server.
Add file server.js
for example and put following code:
var http = require('http');
var fs = require('fs');
const PORT=8080;
fs.readFile('./index.html', function (err, html) {
if (err) throw err;
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(html);
response.end();
}).listen(PORT);
});
And after start server from console with command node server.js
. Your index.html page will be available on URL http://localhost:8080
Upvotes: 54
Reputation: 928
Either you use a framework or you write your own server with nodejs.
A simple fileserver may look like this:
import * as http from 'http';
import * as url from 'url';
import * as fs from 'fs';
import * as path from 'path';
var mimeTypes = {
"html": "text/html",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"js": "text/javascript",
"css": "text/css"};
http.createServer((request, response)=>{
var pathname = url.parse(request.url).pathname;
var filename : string;
if(pathname === "/"){
filename = "index.html";
}
else
filename = path.join(process.cwd(), pathname);
try{
fs.accessSync(filename, fs.F_OK);
var fileStream = fs.createReadStream(filename);
var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
response.writeHead(200, {'Content-Type':mimeType});
fileStream.pipe(response);
}
catch(e) {
console.log('File not exists: ' + filename);
response.writeHead(404, {'Content-Type': 'text/plain'});
response.write('404 Not Found\n');
response.end();
return;
}
return;
}
}).listen(5000);
Upvotes: 1