2015-01-04 67 views
1

我有一个让用户上传实时数据的小项目。由于我是一名PHP开发人员,我发现使用Node.js和Socket.io非常困难。我所做的是,我使用PHP作为我的应用程序的主要后端。它将从用户接收数据并将其保存到数据库。用户提交数据后,PHP会将数据发送到node.js应用程序,该应用程序将通过socket.io发送给所有连接的用户。但我该怎么做?我的意思是如何node.js不会有新的数据?我希望PHP将数据(通过POST)发送到Nodejs,然后socket.io将播放它。Node.js + Socket.io如何从PHP接收数据

我找不到任何工作示例。 BTW,PHP发送给Node.js的数据将以JSON格式。有人问这里:NodeJS receiving data from PHP server但我不明白它是如何工作的。

回答

3

这里有一个简单的Node.js应用程序创建一个REST API,你可以张贴JSON到:

app.js:

var express = require('express'); 
var bodyParser = require('body-parser'); 
var app = express(); 

app.use(bodyParser.urlencoded({ extended: true})); 
app.use(bodyParser.json()); 
app.use(bodyParser.json({type: 'application/vnd.api+json'})); 

var router = express.Router(); 

function dataHandler(req, res) { 
    // the 'body' variable will contain the json you've POSTed: 
    var body = req.body; 
    // your socket.io logic would go around here. 
    console.log(body.message); 
    res.send("ok"); 
} 

router.route('/receive') 
    .post(dataHandler); 
app.use('/api', router); 

app.listen(3000, function() { 
    console.log('Express started at port 3000'); 
}); 

的package.json:

{ 
    "name": "node-test", 
    "descirption": "Node test", 
    "version": "0.0.1", 
    "private": true, 
    "dependencies": { 
    "body-parser": "^1.10.0", 
    "express": "^4.4.3" 
    } 
} 

要让它工作,按照下面的步骤(假设你已经安装了Node):

  1. 创建一个新目录,并在其中创建上述两个文件
  2. 运行npm install。这将读取package.json并安装所需的依赖
  3. 运行node app.js
  4. 发送到URL http://localhost:3000/api/receive以下JSON消息POST:

    { “消息”: “世界,你好” }

检查您运行node app.js的控制台输出。它应该记录“Hello world”消息。

你正在创建的是一个简单的REST api。要了解更多关于如何使用Node.js来完成REST API以及了解我发布的示例应用程序中发生了什么的信息,可以参阅Google'Node.js rest api tutorial'。您通常必须挑选您阅读的内容,因为某些教程将解释如何设置数据库等。Here's one需要完成上述示例中的大部分工作。

+0

哇!这次真是万分感谢。我只需要处理Socket.io逻辑。 – user3569641 2015-01-04 11:58:30

+0

但是,发送JSON时,我只收到'Undefined'。 – user3569641 2015-01-04 12:11:42

+0

我使用[Postman chrome扩展](https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm)测试了示例代码,至少适用于此。 'Undefined'是否打印到控制台,还是对POST的响应?如果打印到控制台,请尝试将'console.log(body.message);'更改为'console.log(body);'。此外,请确保您已为您的请求设置了“Content-Type:application/json”标头。 – 2015-01-04 13:04:16