用 Node.JS 表达 JS
Express JS with Node.JS
我的网站有问题。我是 运行 Ubuntu 16.04.1 x64 node.js。对于我的网站,每当我访问我网站上的其他页面时。它会将他们定向到 404 页面,即使我为其设置了路由。
这是我的 server.js 文件:
var http = require('http');
var express = require('express');
var fs = require('fs');
var bodyParser = require('body-parser');
var app = express();
app.use('/',express.static(__dirname + '/'));
app.use(bodyParser.urlencoded({ extended: false }));
app.engine('.html', require('ejs').__express);
app.set('view engine','html');
app.get('/', function(req, res){
res.render('index');
});
app.get('/resume', function(req, res){
res.render('resume');
});
app.get('/contact', function(req, res){
res.render('contact');
});
app.use(function(req, res) {
res.status(404).render('404');
});
app.listen(3000, function () {
console.log('Listening on port 3000!');
});
对于 nginx 的其他配置,一切都基于此处的指南:https://code.lengstorf.com/deploy-nodejs-ssl-digitalocean/
根据您的 express 静态配置和路由配置,express 需要 index.html
、resume.html
和 contact.html
在视图目录中。
默认情况下,快速 res.render() 方法需要您在 ./views
文件夹中查看:http://expressjs.com/en/4x/api.html#app.render
因此您的项目应如下所示:
www
|-- views
| |-- index.html
| |-- resume.html
| +-- contact.html
|-- node_modules
| + ...
|-- index.js
+-- package.json
一些提示,您没有使用 import http,因此您可以将其删除,然后您使用的是通常使用 3 个参数的自定义中间件 req, res, next
。并且可以把html前面的点去掉=> app.engine('.html', require('ejs').__express);
那么对于你的问题,它应该是一个配置问题,不是来自nodeJS,我在我的机器上试过,你发送的代码一切正常(假设你的视图在一个名为views的目录中,姓名 index.html 等)
所以你应该看看你的 nginx/apache 配置
找到解决方案。我已经尝试 运行 这个命令:DEBUG=express:* node server.js
并且它返回了一个包含这个
的错误
Error: listen EADDRINUSE :::3000
at Object.exports._errnoException (util.js:1026:11)
at exports._exceptionWithHostPort (util.js:1049:20)
at Server._listen2 (net.js:1257:14)
at listen (net.js:1293:10)
at Server.listen (net.js:1389:5)
at EventEmitter.listen (/apps/michaeluy.me/node_modules/express/lib/application.js:617:24)
at Object.<anonymous> (/apps/michaeluy.me/server.js:30:5)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
现在我只是将 server.js 文件中的 3000 更改为 5000,如下所示:
app.listen(5000, function () {
console.log('Listening on port 5000!');
});
现在。效果很好!
我的网站有问题。我是 运行 Ubuntu 16.04.1 x64 node.js。对于我的网站,每当我访问我网站上的其他页面时。它会将他们定向到 404 页面,即使我为其设置了路由。
这是我的 server.js 文件:
var http = require('http');
var express = require('express');
var fs = require('fs');
var bodyParser = require('body-parser');
var app = express();
app.use('/',express.static(__dirname + '/'));
app.use(bodyParser.urlencoded({ extended: false }));
app.engine('.html', require('ejs').__express);
app.set('view engine','html');
app.get('/', function(req, res){
res.render('index');
});
app.get('/resume', function(req, res){
res.render('resume');
});
app.get('/contact', function(req, res){
res.render('contact');
});
app.use(function(req, res) {
res.status(404).render('404');
});
app.listen(3000, function () {
console.log('Listening on port 3000!');
});
对于 nginx 的其他配置,一切都基于此处的指南:https://code.lengstorf.com/deploy-nodejs-ssl-digitalocean/
根据您的 express 静态配置和路由配置,express 需要 index.html
、resume.html
和 contact.html
在视图目录中。
默认情况下,快速 res.render() 方法需要您在 ./views
文件夹中查看:http://expressjs.com/en/4x/api.html#app.render
因此您的项目应如下所示:
www
|-- views
| |-- index.html
| |-- resume.html
| +-- contact.html
|-- node_modules
| + ...
|-- index.js
+-- package.json
一些提示,您没有使用 import http,因此您可以将其删除,然后您使用的是通常使用 3 个参数的自定义中间件 req, res, next
。并且可以把html前面的点去掉=> app.engine('.html', require('ejs').__express);
那么对于你的问题,它应该是一个配置问题,不是来自nodeJS,我在我的机器上试过,你发送的代码一切正常(假设你的视图在一个名为views的目录中,姓名 index.html 等)
所以你应该看看你的 nginx/apache 配置
找到解决方案。我已经尝试 运行 这个命令:DEBUG=express:* node server.js
并且它返回了一个包含这个
Error: listen EADDRINUSE :::3000
at Object.exports._errnoException (util.js:1026:11)
at exports._exceptionWithHostPort (util.js:1049:20)
at Server._listen2 (net.js:1257:14)
at listen (net.js:1293:10)
at Server.listen (net.js:1389:5)
at EventEmitter.listen (/apps/michaeluy.me/node_modules/express/lib/application.js:617:24)
at Object.<anonymous> (/apps/michaeluy.me/server.js:30:5)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
现在我只是将 server.js 文件中的 3000 更改为 5000,如下所示:
app.listen(5000, function () {
console.log('Listening on port 5000!');
});
现在。效果很好!