【问题标题】:Running a node.js file from website从网站运行 node.js 文件
【发布时间】:2016-08-02 14:28:23
【问题描述】:

我最近开始使用 Twilio 平台向我的用户发送 SMS。我完全可以使用以下命令从节点终端运行 node.js 文件:

 node twilio.js 

现在,我的目标是能够通过我的网站发送这些短信。例如,当用户提供他的电话号码并按下“发送短信”按钮时。我怎样才能做到这一点?我一直在寻找这个,我遇到了 Express 平台、ajax 发布请求、http 服务器等。但是,我不知道如何使用它们。我目前在我的网站上发出了许多 ajax 请求(POST 和 GET),但我无法向节点文件发出请求。

提前致谢,

这是 twilio.js 文件:

    // Twilio Credentials
    var accountSid = 'ACCOUNT SID';
    var authToken = 'ACCOUNT TOKEN';

    //require the Twilio module and create a REST client
    var client = require('twilio')(accountSid, authToken);

    client.messages.create({
        to: 'TO',
        from: 'FROM',
        body: 'Message sent from Twilio!',
    }, function (err, message) {
        console.log(message.sid);
    });

【问题讨论】:

    标签: javascript ajax node.js


    【解决方案1】:

    能够通过网页在您的服务器上运行任意脚本会带来巨大的安全风险 - 不要那样做。我不确定你在哪里托管你的网站,或者你在什么技术栈上运行你的网站,但是既然你提到了 Express 和 Node——如果你使用 Express,我建议你设置一个路由处理一个ajax请求。当有人按下“发送短信”时,您会向该路由发送一个 ajax 请求,并在被调用的处理程序中放置 Twilio 逻辑。

    【讨论】:

      【解决方案2】:

      这是设置调用节点模块的 Express 请求的一种非常简单的方法:

      twilio.js:

      // Twilio Credentials
      var accountSid = 'ACCOUNT SID';
      var authToken = 'ACCOUNT TOKEN';
      
      //require the Twilio module and create a REST client
      var client = require('twilio')(accountSid, authToken);
      
      function sendSms(callback) {
          client.messages.create({
              to: 'TO',
              from: 'FROM',
              body: 'Message sent from Twilio!',
          }, callback);
      }
      
      // Export this function as a node module so that you can require it elsewhere
      module.exports = sendSms;
      

      Here 是 Express 的一个良好开端。

      server.js:

      var express = require('express');
      var app = express();
      
      // Requiring that function that you exported
      var twilio = require('/path/to/twilio.js');
      
      // Creating a controller for the get request: localhost:8081/send/sms
      app.get('/send/sms', function (req, res) {
         twilio(function(err, message) {
           if (err) res.send(err);
           res.send('Message sent: ' + message);
         });
      });
      
      // Creating an HTTP server that listens on port 8081 (localhost:8081)
      var server = app.listen(8081, function () {
      
        var host = server.address().address;
        var port = server.address().port;
      
        console.log("Example app listening at http://%s:%s", host, port);
      
      });
      

      然后你可以运行node server.js,进入你的浏览器并进入url:localhost:8081/send/sms,你的消息就会被发送:)

      【讨论】:

        【解决方案3】:

        我会这样做,以便客户端向服务器发送 HTTP POST 请求,然后服务器将代表客户端发送消息。

        最简单的方法是使用快递。我有点不确定您如何在不使用 express 的情况下从 Node.js 应用程序为您的网站提供服务。您是否有自定义解决方案或只有从端未连接的解决方案,或类似 heroku 之类的东西?在任何情况下,您都可以使用以下内容创建处理帖子的路由:

        app.post("send_twilio_message_route", function(req,res){ // this receives the post request -- process here });

        ^ 请注意,这实际上并没有创建 express 应用程序。请参阅下面的链接,他们提供了一些细节和语法的示例。

        因此,以上内容将在服务器上,在您的 Node.js 应用程序中。从浏览器中运行的前端客户端代码,您需要创建一个帖子。最简单的方法和最有可能的方法是通过 Jquery 中的 $.post 。如果您使用的是 Angular,则语法略有不同,但想法相同。您调用 post,将其指向一个 url,然后放入正文数据。

        使发布请求的正文包含消息、电话号码、 可能是身份验证令牌。

        查看此内容以便能够从发布请求中获取正文以及如何设置它的更多实现细节: How to retrieve POST query parameters?

        根据您所做工作的性质,您可能会考虑让短信处理程序与实际的 Web 服务分开运行。我将创建 sms 独特的东西作为它自己的模块,并有一个函数检索路由器,以便您可以将它安装到应用程序上并稍后移动它。如果您正在做一些小事,这可能有点矫枉过正,但我​​基本上鼓励您一开始就考虑隔离您的网站服务,否则您会造成混乱。话虽这么说,如果这只是一件小事,只对你来说可能没关系。取决于你的需要。

        • 重要提示:我强烈建议您考虑恶意用户,也就是我。如果您没有在帖子正文中添加任何身份验证(或者您可以将其包含在 url 中,但我不会这样做,尽管它是等效的),恶意客户端可能完全是一个混蛋并消耗您所有的 twilio 资源。因此,一旦您将其基本运行起来,在将其部署到人们将看到的任何东西之前,我建议您添加身份验证和速率限制。

        【讨论】:

        • 非常感谢布拉德福德的详细回答。如果,我总结一下,我将不得不从前端发出一个发布请求,并使用 Express 在服务器上使用 node.js 捕获发送的数据?我会看看你的链接。再次感谢,非常感谢!
        • 是的。另外,您可能会发现 curl ——一个命令行工具——很有用。它可以生成常见的 Web 请求。我通常在编写后端代码时使用它来测试。有些人可能会争辩说,包括 jquery,仅仅编写一个小的基本程序并不复杂,但值得一提。
        • 好的,我去看看。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 2019-04-22
        • 1970-01-01
        相关资源
        最近更新 更多