我的应用程序仅适用于端口3000 .
如果我将端口更改为其他任何东西,它将工作,但当页面加载时,它会发生此错误 .
abc未定义在eval(eval at compile(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)在View.exports.renderFile [作为引擎]的tryHandleCache(C:\ Users \ ASUS \ node_modules \ ejs \ lib \ ejs.js:223:34)中(C:用户\ ASUS \ node_modules \ ejs \ lib \ ejs.js:437:10)在tryRender上的View.render(C:\ Users \ ASUS \ node_modules \ express \ lib \ view.js:128:8)(C: \ Users \ ASUS \ node_modules \ express \ lib \ application.js:640:10)在ServerResponse.render的EventEmitter.render(C:\ Users \ ASUS \ node_modules \ express \ lib \ application.js:592:3)处( 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:\用户\ ASUS \ node_modules \表达\ lib中\路由器\ 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'))
但为什么?
更新
它只是固定自己,它现在正常工作,我不知道为什么 . 太糟糕了 .
3 回答
您可以尝试对端口进行硬编码:app.set(“port”,process.env.PORT || 3000);
或者:$ PORT = 8080节点app.js
此外,如果您不在Windows上,并且想要使用1024以下的端口,请首先尝试:sudo PORT = 80 node app.js
如果要将路由处理程序放在单独的文件中,则可以,只需要使用
app.use(...)
调用该文件即可 .相反,你可以这样做:
它与
abc
变量无关 .这是因为,我认为控制器没有正确导入 . 如果你这样写我认为,它会正常工作
在
var route = require('./router')
中定义require('./router')
时要小心,因为它是相对的,所以它完全取决于你的文件夹结构 .