Не удается получить /index.html. следуя руководству по Node.js и MongoDB
Я следую руководству по созданию формы регистрации отсюда. Следующие шаги приводят к ошибке при попытке подключения
http://127.0.0.1:3000/
Не удается получить /index.html
я начинаю
MongoDB
из
C:\Program Files\MongoDB\Server\4.4\bin
Мое единственное изменение в коде -
mongoose.connect('mongodb://localhost:27017/gfg', { useNewUrlParser: true, useUnifiedTopology: true });
Поскольку при запуске приложения было объявлено, что есть устаревшие приложения, но ничего не произошло.
MongoDB запускается правильно
mongod {"t":{"$date":"2020-09-28T20:39:11.740-04:00"},"s":"I", "c":"NETWORK", "id":23016, "ctx":"listener","msg":"Waiting for connections","attr":{"port":27017,"ssl":"off"}}
и приложение узла
server listening at port 3000 connection succeeded
так что я не знаю, где я напортачил
Мой режиссер выглядит так
project root
├── app.js
├── index.html
└── package-lock.json
├── signup_success.html
├── style.css
Firefox дает мне
404 GET error on inspection
вот app.js
var express=require("express");
var bodyParser=require("body-parser");
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/gfg', { useNewUrlParser: true, useUnifiedTopology: true });
var db=mongoose.connection;
db.on('error', console.log.bind(console, "connection error"));
db.once('open', function(callback){
console.log("connection succeeded");
})
var app=express()
app.use(bodyParser.json());
app.use(express.static(__dirname + "/../public"));
app.use(bodyParser.urlencoded({
extended: true
}));
app.post('/sign_up', function(req,res){
var name = req.body.name;
var email =req.body.email;
var pass = req.body.password;
var phone =req.body.phone;
var data = {
"name": name,
"email":email,
"password":pass,
"phone":phone
}
db.collection('details').insertOne(data,function(err, collection){
if (err) throw err;
console.log("Record inserted Successfully");
});
return res.redirect('signup_success.html');
})
app.get('/', (req,res) => { res.render('index.html');
}).listen(3000)
console.log("server listening at port 3000");
2 ответа
Если вы столкнулись с проблемой доступа к http://127.0.0.1:3000/ и получите эту ошибку Cannot GET /index.html, добавьте строку ниже в app.js после строки var app=express().
app.use(express.static(__dirname));
Ошибка «Не удается получить /index.html» будет устранена.
app.js
var express=require("express");
var bodyParser=require("body-parser");
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/gfg', { useNewUrlParser: true, useUnifiedTopology: true });
var db=mongoose.connection;
db.on('error', console.log.bind(console, "connection error"));
db.once('open', function(callback){
console.log("connection succeeded");
})
var app=express()
app.use(express.static(__dirname));
app.use(bodyParser.json());
app.use(express.static(__dirname + "/../public"));
app.use(bodyParser.urlencoded({
extended: true
}));
app.post('/sign_up', function(req,res){
var name = req.body.name;
var email =req.body.email;
var pass = req.body.password;
var phone =req.body.phone;
var data = {
"name": name,
"email":email,
"password":pass,
"phone":phone
}
db.collection('details').insertOne(data,function(err, collection){
if (err) throw err;
console.log("Record inserted Successfully");
});
return res.redirect('signup_success.html');
})
app.get('/', (req,res) => { res.render('index.html');
}).listen(3000)
console.log("server listening at port 3000");
index.html
<!DOCTYPE html>
<html>
<head>
<title> Signup Form</title>
<link rel="stylesheet"
href=
"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity=
"sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<br>
<br>
<br>
<div class="container" >
<div class="row">
<div class="col-md-3">
</div>
<div class="col-md-6 main">
<form action="/sign_up" method="post">
<h1> Signup form </h1>
<input class="box" type="text" name="name" id="name"
placeholder="Name" required /><br>
<input class="box" type="email" name="email" id="email"
placeholder="E-Mail " required /><br>
<input class="box" type="password" name="password"
id="password" placeholder="Password " required/><br>
<input class="box" type="text" name="phone" id="phone"
placeholder="Phone Number " required/><br>
<br>
<input type="submit" id="submitDetails"
name="submitDetails" value="Submit" /><br>
</form>
</div>
<div class="col-md-3">
</div>
</div>
</div>
</body>
</html>
Итак, ваша проблема в том, что вы используете
render
для ваших взглядов. Однако вы не указали движок рендеринга (ejs, pug и т. Д.).
При этом файлы HTML не требуют механизма рендеринга. Их можно просто подавать так:
app.get('/', (req, res) => {
res.sendFile('index.html', {
root: './'
}
})