【问题标题】:Express only works on port 3000Express 仅适用于端口 3000
【发布时间】:2018-01-13 21:34:25
【问题描述】:

我的应用只能在 3000 端口上运行。

如果我将端口更改为其他任何东西,它会起作用,但是当页面加载时会出现此错误。

abc 未定义 在 eval (编译时的 eval (C:\Users\ASUS\node_modules\ejs\lib\ejs.js:549:12), :22:26) 在返回Fn (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;

我正在使用 node app 命令启动我的服务器

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'))

但是为什么呢?

更新

它自己修复了,现在可以正常工作了,我不知道为什么。太烂了。

【问题讨论】:

  • 不看controllers很难说哪里错了
  • @ManasJayanth 我已经用 controllers/index.js 更新了帖子
  • 我认为这是一个 ejs 错误。与哈巴狗一起工作,但我找不到记事本++的哈巴狗/玉语法荧光笔,所以我不认为我可以使用它,是否有一个很好的模板引擎,具有类似 django 的语法? swig 看起来很棒,但没有维护。
  • 您发布的代码没有问题。刚刚在我的系统上运行良好。
  • 也没有发现ejs 有什么问题。

标签: node.js express ejs


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

如果您想将路由处理程序放在单独的文件中,那么您可以,只是无需使用app.use(...) 调用该文件。

相反,您可以这样做:

require('./controllers');

它与abc 变量无关。

【讨论】:

    【解决方案3】:

    这是因为,我认为控制器没有正确导入。如果你这样写,我认为它会很好用

    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...')
    })
    

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

    【讨论】:

    • 我使用的是this 应用结构,是不是错了?错误已经消失了。我什么都没做,一切都还是一样,没有错误,这让我很困惑。
    • 没错。但是 MVC 结构更适合于干净的架构。
    猜你喜欢
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2019-10-28
    • 1970-01-01
    • 2016-10-22
    • 2023-03-31
    相关资源
    最近更新 更多