Nodejs,PHP和Express

3

我被要求在nodejs中创建一个待办事项列表和一个上传png文件的表单。这些是我当前拥有的软件包:

{
  "name": "todo",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "ejs": "0.8.5",
    "ejs-locals": "^1.0.2",
    "express": "3.4.7",
    "mongoose": "^3.8.1",
    "php-node": "0.0.2"
  }
}

这是我的PHP表单:
<form action="/Upload.php" method="post" enctype="multipart/form-data">
 Select image to upload: <br>
   <input type="file" name="fileToUpload" id="fileToUpload"> <br> <br>
   <input type="submit" value="Upload Image" name="submit">
</form>

我使用以下代码进行加载:

app.post('/Upload.php' ,function ( req, res ){
res.render("Upload.php");
});

这是整个app.js文件:

/**
* Module dependencies.
*/
require( './db' );

var express = require( 'express' );
var routes  = require( './routes' );
var http    = require( 'http' );
var php     = require( 'php-node' ); 
var path    = require( 'path' );
var app     = express();
var engine  = require( 'ejs-locals' );


// all environments
app.set( 'port', process.env.PORT || 3001 );
app.engine( 'ejs', engine );
app.set( 'views', path.join( __dirname, 'views' ));
app.set( 'view engine', 'ejs' );
app.use( express.favicon());
app.use( express.logger( 'dev' ));
app.use( express.bodyParser());
app.use( express.json());
app.use( express.urlencoded());
app.use( express.methodOverride());
app.use( app.router );
app.use( express.static( path.join( __dirname, 'public' )));

// development only
if ( 'development' == app.get( 'env' )) {
  app.use( express.errorHandler());
}

app.get( '/', routes.index );
app.get( '/edit/:id', routes.edit );
app.get( '/destroy/:id', routes.destroy );
app.post( '/create', routes.create );
app.post( '/update/:id', routes.update );

app.post('/Upload.php' ,function ( req, res ){
    res.render("Upload.php");
});

http.createServer( app ).listen( app.get( 'port' ), function(){
  console.log( 'Express server listening on port ' + app.get( 'port' ));
} );

错误日志:
Express
500 Error: Cannot find module 'php'

at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:278:25)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at new View (C:\todo\node_modules\express\lib\view.js:43:49)
at Function.app.render (C:\todo\node_modules\express\lib\application.js:486:12)
at ServerResponse.res.render (C:\todo\node_modules\express\lib\response.js:798:7)
at C:\todo\app.js:42:6
at callbacks (C:\todo\node_modules\express\lib\router\index.js:164:37)
at param (C:\todo\node_modules\express\lib\router\index.js:138:11)

有没有一种方法可以在不更改引擎的情况下加载.php页面?

为什么你在这里需要PHP呢? - Vsevolod Goloviznin
是的,我现在正在尝试使用Node.js和Multer。如果我能够使用.php脚本,那对我来说会更容易些。 - Carrier
1个回答

0
如果您想要将PHP Node作为视图引擎与ejs一起使用,请按照以下方式更改设置视图引擎。我刚刚测试了代码,它对我有效。
app.engine( 'ejs', engine );
app.set( 'view engine', 'ejs' );
app.engine('php', phpnode);
app.set('view engine', 'php');

1
如果我将引擎更改为php-node,其他所有内容都将停止工作。我需要保持ejs引擎的同时能够加载.php页面。 - Carrier
当这样做并访问页面时,php页面只会下载!而不是渲染。有什么想法吗? - KTM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接