Express仅适用于端口3000

时间:2017-08-06 13:04:26

标签: node.js express ejs

我的应用仅适用于端口3000。

如果我将端口更改为其他任何内容,它将起作用,但是当页面加载时会发生此错误。

  

abc未定义       在eval(编译时的eval(C:\ Users \ ASUS \ node_modules \ ejs \ lib \ ejs.js:549:12),:22:26)       at returnedFn(C:\ Users \ ASUS \ node_modules \ ejs \ lib \ ejs.js:580:17)       在tryHandleCache(C:\ Users \ ASUS \ node_modules \ ejs \ lib \ ejs.js:223:34)       在View.exports.renderFile [作为引擎](C:\ Users \ ASUS \ node_modules \ ejs \ lib \ ejs.js:437:10)       在View.render(C:\ Users \ ASUS \ node_modules \ express \ lib \ view.js:128:8)       在tryRender(C:\ Users \ ASUS \ node_modules \ express \ lib \ application.js:640:10)       在EventEmitter.render(C:\ Users \ ASUS \ node_modules \ express \ lib \ application.js:592:3)       在ServerResponse.render(C:\ Users \ ASUS \ node_modules \ express \ lib \ response.js:971:7)       在C:\ Users \ ASUS \ Desktop \ nodeweb \ controllers \ index.js:21:6       在Layer.handle [as handle_request](C:\ Users \ ASUS \ node_modules \ express \ lib \ router \ layer.js:95:5)

abc是我在index.ejs中使用的变量,在路由器中定义。

var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
    res.render('index', {abc: 23})
});
module.exports = router;

我正在使用节点应用命令启动我的服务器

var app = express();

app.set('view engine', 'ejs')
app.use(express.static(__dirname + '/public'));

app.use(require('./controllers'))

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

更新

我想我发现了这个问题 它在我使用

时有效
app.use('/', function(req, res) {
    res.render('index', {tit:[1,2,3,4,5]});
})

而不是

app.use(require('./controllers'))

但为什么?

更新

它只是自行修复,现在正常工作,我不知道为什么。太糟糕了。

3 个答案:

答案 0 :(得分:0)

您可以尝试对端口进行硬编码: app.set(“port”,process.env.PORT || 3000);

或者这个: $ PORT = 8080节点app.js

此外,如果您不在Windows上,并且想要使用1024以下的端口,请首先尝试: sudo PORT = 80节点app.js

答案 1 :(得分:0)

如果要将路由处理程序放在单独的文件中,则可以,只需要使用app.use(...)调用该文件即可。

相反,您可以这样做:

require('./controllers');

它与abc变量无关。

答案 2 :(得分:0)

这是因为我认为控制器没有正确导入。如果你这样写,我想,它会正常工作

var router = require('express').Router();
router.get('/', function(req, res) {
    res.render('index', {abc: 23})
});
module.exports = router;



var app = express();
var route = require('./router')
app.set('view engine', 'ejs')
app.use(express.static(__dirname + '/public'));

app.use('/',route);

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

require('./router')中定义var route = require('./router')时要小心,因为它是相对的,所以它完全取决于您的文件夹结构。