Express 仅适用于端口 3000
Posted
技术标签:
【中文标题】Express 仅适用于端口 3000【英文标题】:Express only works on port 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
有什么问题。
【参考方案1】:
您可以尝试对端口进行硬编码: app.set("端口", process.env.PORT || 3000);
或者这个: $ PORT=8080 节点app.js
另外,如果您不在 Windows 上,并且想使用低于 1024 的端口,请先尝试以下操作: sudo PORT=80 节点 app.js
【讨论】:
它不起作用。无论如何,这与端口有什么关系? http://prntscr.com/g51dih【参考方案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 结构更适合于干净的架构。以上是关于Express 仅适用于端口 3000的主要内容,如果未能解决你的问题,请参考以下文章