Nodejs关于express4启动问题

Nodejs关于express4启动问题

今天把机器的express3.x更新成了express4 然后新建了一个项目运行ok,启动用的是npm start发现启动的是 bin下面的www 可是我之前的项目并没有这个www,用之前的node app.js也不行 我要怎么做

4 回复

Nodejs关于express4启动问题

如果你最近将Express版本从3.x升级到了4.x,并且遇到了启动问题,这可能是因为Express 4.x有一些重要的变更。特别是,Express 4.x移除了内置的中间件(如body-parser, cookie-parser等),这些中间件需要单独安装。

在Express 4.x中,启动脚本也发生了变化。通常情况下,Express 4.x项目会有一个bin/www文件,用于配置和启动应用。如果你之前没有这个文件,可能会遇到启动问题。

示例代码

  1. 创建bin/www文件: 如果你还没有bin/www文件,可以创建一个,并添加以下内容:

    #!/usr/bin/env node
    
    /**
     * Module dependencies.
     */
    var app = require('../app');
    var debug = require('debug')('my-application');
    var http = require('http');
    
    /**
     * Get port from environment and store in Express.
     */
    var port = normalizePort(process.env.PORT || '3000');
    app.set('port', port);
    
    /**
     * Create HTTP server.
     */
    var server = http.createServer(app);
    
    /**
     * Listen on provided port, on all network interfaces.
     */
    server.listen(port);
    server.on('error', onError);
    server.on('listening', onListening);
    
    /**
     * Normalize a port into a number, string, or false.
     */
    function normalizePort(val) {
      var port = parseInt(val, 10);
    
      if (isNaN(port)) {
        // named pipe
        return val;
      }
    
      if (port >= 0) {
        // port number
        return port;
      }
    
      return false;
    }
    
    /**
     * Event listener for HTTP server "error" event.
     */
    function onError(error) {
      if (error.syscall !== 'listen') {
        throw error;
      }
    
      var bind = typeof port === 'string'
        ? 'Pipe ' + port
        : 'Port ' + port;
    
      // handle specific listen errors with friendly messages
      switch (error.code) {
        case 'EACCES':
          console.error(bind + ' requires elevated privileges');
          process.exit(1);
          break;
        case 'EADDRINUSE':
          console.error(bind + ' is already in use');
          process.exit(1);
          break;
        default:
          throw error;
      }
    }
    
    /**
     * Event listener for HTTP server "listening" event.
     */
    function onListening() {
      var addr = server.address();
      var bind = typeof addr === 'string'
        ? 'pipe ' + addr
        : 'port ' + addr.port;
      debug('Listening on ' + bind);
    }
    
  2. 修改package.json中的启动脚本: 确保你的package.json文件中有正确的启动脚本,例如:

    {
      "name": "your-app",
      "version": "1.0.0",
      "description": "",
      "main": "app.js",
      "scripts": {
        "start": "node ./bin/www"
      },
      ...
    }
    
  3. 运行项目: 现在你可以使用npm start来启动你的应用。

通过以上步骤,你应该能够解决Express 4.x启动的问题。如果仍然有问题,请检查是否有其他依赖项或环境配置问题。


依葫芦画瓢呗。拷贝一份现有的www。之后再导出,引入。:)

顺便问一下 methodOverride 中间件是做什么用的 为什么use了这个就启动不了了,注释他就可以了

针对你提到的Express 3.x 升级到 Express 4.x 后遇到的问题,可以按照以下步骤进行调整。主要的变化在于启动脚本的处理方式。

解决方法

  1. 修改 package.json 中的 start 脚本: 确保你的 package.json 文件中的 start 脚本指向正确的入口文件。默认情况下,Express 4.x 使用一个名为 bin/www 的文件作为启动脚本。

    "scripts": {
      "start": "node ./bin/www"
    }
    
  2. 创建或修改 bin/www 文件: 如果你没有 bin/www 文件,可以手动创建一个。以下是 bin/www 的基本结构:

    #!/usr/bin/env node
    
    /**
     * Module dependencies.
     */
    var app = require('../app');
    var debug = require('debug')('my-application');
    var http = require('http');
    
    /**
     * Get port from environment and store in Express.
     */
    var port = normalizePort(process.env.PORT || '3000');
    app.set('port', port);
    
    /**
     * Create HTTP server.
     */
    var server = http.createServer(app);
    
    /**
     * Listen on provided port, on all network interfaces.
     */
    server.listen(port);
    server.on('error', onError);
    server.on('listening', onListening);
    
    /**
     * Normalize a port into a number, string, or false.
     */
    function normalizePort(val) {
      var port = parseInt(val, 10);
    
      if (isNaN(port)) {
        // named pipe
        return val;
      }
    
      if (port >= 0) {
        // port number
        return port;
      }
    
      return false;
    }
    
    /**
     * Event listener for HTTP server "error" event.
     */
    function onError(error) {
      if (error.syscall !== 'listen') {
        throw error;
      }
    
      var bind = typeof port === 'string'
        ? 'Pipe ' + port
        : 'Port ' + port;
    
      // handle specific listen errors with friendly messages
      switch (error.code) {
        case 'EACCES':
          console.error(bind + ' requires elevated privileges');
          process.exit(1);
          break;
        case 'EADDRINUSE':
          console.error(bind + ' is already in use');
          process.exit(1);
          break;
        default:
          throw error;
      }
    }
    
    /**
     * Event listener for HTTP server "listening" event.
     */
    function onListening() {
      var addr = server.address();
      var bind = typeof addr === 'string'
        ? 'pipe ' + addr
        : 'port ' + addr.port;
      debug('Listening on ' + bind);
    }
    
  3. 确保 app.jsserver.js 正确引用: 在 Express 4.x 中,app.js 通常被用来设置应用配置和中间件。而 bin/www 是实际启动服务器的地方。确保 app.js 正常导出应用实例,并在 bin/www 中正确引用。

通过以上步骤,你应该能够顺利启动 Express 4.x 应用。如果还有其他问题,请检查是否有依赖库版本不兼容等问题。

回到顶部