Nodejs求助帖:express新建项目成功,但无法运行app.js

Nodejs求助帖:express新建项目成功,但无法运行app.js

我是参考《node.js开发指南》里面自学的,现在在第五章这里,我照着实例express -e ejs microblog创建了一个项目,并且经过折腾后也能正常npm install但是执行项目的app.js时候直接就不行了,也不报错,就是又回去了。 具体可以参考我在这里的提问,问题描述的最后那一段,不知道各位大神碰到过没有,菜鸟小弟谢过了 问题描述

6 回复

当然可以。以下是一个详细的解答,希望对你有所帮助。


Nodejs求助帖:express新建项目成功,但无法运行app.js

问题描述

我正在学习《Node.js开发指南》,目前在第五章。根据书中的示例,我使用命令 express -e ejs microblog 创建了一个新的Express项目,并且安装了所有依赖包(npm install)。然而,在尝试运行项目的 app.js 文件时遇到了一些问题。当我运行 node app.js 时,没有任何错误信息输出,但程序似乎卡住了,没有继续执行下去。

解决方案

根据你描述的情况,有几个可能的原因导致你的程序无法正常运行。以下是一些常见的排查步骤和解决方案:

  1. 检查 app.js 中的错误 确保你的 app.js 文件中没有语法错误或逻辑错误。一个简单的检查方法是使用 --inspect 参数启动调试模式,例如:

    node --inspect app.js
    

    这样你可以看到更多的调试信息。

  2. 确保监听端口 确认你的 app.js 文件中正确设置了监听端口。通常情况下,Express 应用会这样设置:

    const express = require('express');
    const app = express();
    
    // 设置监听端口
    const port = process.env.PORT || 3000;
    
    app.get('/', (req, res) => {
      res.send('Hello World!');
    });
    
    app.listen(port, () => {
      console.log(`Server is running on http://localhost:${port}`);
    });
    
  3. 检查中间件和路由 如果你在 app.js 中使用了一些中间件或路由配置,确保这些配置没有问题。例如:

    const express = require('express');
    const path = require('path');
    const logger = require('morgan');
    
    const app = express();
    
    // 使用中间件
    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(express.static(path.join(__dirname, 'public')));
    
    // 路由配置
    app.get('/', (req, res) => {
      res.send('Hello World!');
    });
    
    // 监听端口
    const port = process.env.PORT || 3000;
    app.listen(port, () => {
      console.log(`Server is running on http://localhost:${port}`);
    });
    
  4. 查看日志文件 如果你的应用有写入日志的习惯,检查日志文件可能会帮助你找到问题所在。

  5. 更新依赖 确保所有依赖都是最新的。有时候,依赖版本不匹配会导致问题。你可以通过以下命令更新依赖:

    npm update
    

希望以上建议能帮你解决问题。如果还有其他疑问,欢迎继续提问!


希望这个解答能够帮助到你!如果你有任何进一步的问题,请随时告诉我。


卧槽,居然被我这个菜鸟解决了,但绝对没科学道理,我说一下,我看了用我的环境生成的app.js var express = require(‘express’); var path = require(‘path’); var favicon = require(‘static-favicon’); var logger = require(‘morgan’); var cookieParser = require(‘cookie-parser’); var bodyParser = require(‘body-parser’);

var routes = require(’./routes/index’); var users = require(’./routes/users’);

var app = express();

// view engine setup app.set(‘views’, path.join(__dirname, ‘views’)); app.set(‘view engine’, ‘ejs’);

app.use(favicon()); app.use(logger(‘dev’)); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(cookieParser()); app.use(express.static(path.join(__dirname, ‘public’)));

app.use(’/’, routes); app.use(’/users’, users);

/// catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error(‘Not Found’); err.status = 404; next(err); });

/// error handlers

// development error handler // will print stacktrace if (app.get(‘env’) === ‘development’) { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render(‘error’, { message: err.message, error: err }); }); }

// production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render(‘error’, { message: err.message, error: {} }); });

module.exports = app;

-----------------------------------分割线------------------------------------

然后是书上案例的app.js,是这个样的

/**

  • Module dependencies. */

var express = require(‘express’) , routes = require(’./routes’);

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){ app.set(‘views’, __dirname + ‘/views’); app.set(‘view engine’, ‘ejs’); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + ‘/public’)); });

app.configure(‘development’, function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); });

app.configure(‘production’, function(){ app.use(express.errorHandler()); });

// Routes

app.get(’/’, routes.index);

app.listen(3000); console.log(“Express server listening on port %d in %s mode”, app.address().port, app.settings.env);

我发现我的app.js少一个“app.listen(3000);”,于是我手动加了一个到我的app.js里,然后就跑起来了,但是我不知道,为什么我的app.js里没有这句话,求大神解释,相关参数如下: 系统:Macosx node版本:v0.10.28 express版本:4.2.0 npm版本:1.4.9

告诉你 express4.x 的启动是 npm start 不是node app.js 端口配置在 /bin/www中。。。 果然是菜鸟…

建议按照nswbmw的N-blog做例子,然后把我的学习笔记当做辅助。

根据你的描述,你已经使用 express -e ejs microblog 创建了一个 Express 项目,并且安装了所有依赖(通过 npm install),但是在尝试运行 app.js 文件时遇到了问题。为了帮助你解决这个问题,我们可以逐步检查一些常见的问题及其解决方案。

1. 确认入口文件

首先确认你的 app.js 文件是否被正确命名和放置在项目的根目录下。Express 应用程序默认将 bin/www 文件作为入口点。你需要确保 app.js 被设置为入口文件或在 bin/www 中正确引用。

修改 bin/www 入口点:

#!/usr/bin/env node

/**
 * Module dependencies.
 */
var app = require('../app');
// 确保 app.js 正确加载

2. 检查错误处理

如果应用没有报错信息,但也没有输出,可能是由于错误处理机制没有捕获到异常。确保在 app.js 或其他中间件中添加错误处理逻辑。

示例错误处理:

// 在 app.js 最底部
app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send('Something broke!');
});

3. 启动命令

如果你希望直接运行 app.js,可以使用以下命令启动应用:

node app.js

确保 package.jsonscripts 部分正确配置了启动脚本:

"scripts": {
  "start": "node app.js"
}

然后你可以通过 npm start 命令启动应用。

4. 日志输出

增加一些日志输出以确认应用正在执行的步骤。例如,在 app.js 的顶部和底部添加 console.log 语句:

console.log("Application is starting...");
// 应用程序的其他部分
console.log("Application has started.");

通过这些步骤,你应该能够更好地定位问题所在,并解决问题。希望这些建议对你有所帮助!

回到顶部