执行Node.js脚本以从客户端按钮单击发送Twilio消息

时间:2018-01-24 15:33:48

标签: node.js vue.js twilio

我希望在我的网络应用程序上有一个按钮查询MongoDB,并根据该查询的结果向相应的个人发送短信。

我遇到的问题是测试。我无法弄清楚如何让客户端的按钮在服务器端运行node.js文件。

Node.js:v8.9.4

Vue.js:2.5.13

快递:4.13.3

编辑:

我已经能够让nodejs脚本独立运行。我只是不知道如何从客户端调用它

编辑2:

Main.js

// Dependencies
var http = require('http');
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var busboy = require('connect-busboy');
var cors = require('cors');
var mongoose = require('mongoose');

// Configuration
var config = require('./config');
var twilio = require('twilio');
// Database
mongoose.connect(config.database);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function(){
    console.log('Connected to database');
});

var app = express();
app.set('port', process.env.PORT || 3000);

// Setup middleware
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser(config.sessionSecret));
app.use(express.static(path.join(__dirname, 'dist')));
app.use(busboy());
app.use(cors({
    origin: true,
    credentials: true
}));
app.get('/session',function(req){
    twilio.notifyOnSession();
});

var server = http.createServer(app);

var port = app.get('port');
server.listen(port);
console.log('Listening on port ' + port);

// Load server router
require('./router')(app);

编辑3:

Dashboard.vue

以下是重定向到应用正确部分的代码

getHelpNext() {
      var topic = this.pickedTopic;
      topic = topic.toLowerCase();
      var linkName = '/session/' + topic;
      this.$router.push(linkName);
    }

编辑4:

Router.js

var path = require('path');

module.exports = function(app){
  console.log('Initializing server routing');

  require('./auth')(app);
  require('./api')(app);

  // Determine if incoming request is a static asset
  var isStaticReq = function(req){
    return ['/auth', '/api', '/js', '/css'].some(function(whitelist){
      return req.url.substr(0, whitelist.length) === whitelist;
    });
  };

  // Single page app routing
  app.use(function(req, res, next){
    if (isStaticReq(req)){
      return next();
    }
    res.sendFile(path.join(__dirname, '../dist/index.html'));
  });
};

3 个答案:

答案 0 :(得分:1)

您需要创建一个获取请求的端点。这是明确的:

name

其中app是您在某个端口上侦听的快速服务器。 这应该是你的vue

app.post('/some/end/point', (req, res) => {
  // -> send twillo message code here. If you use bodyParser,
  // req.body.message holds 'foo bar'
  res.status(200).end(); // do this if sending the message is a success
})

答案 1 :(得分:0)

您在这里描述了几个应单独进行单元测试的组件。

  • 查询Mongodb
  • 节点JS脚本 - 模拟mongodb查询结果而不是。
  • Twillo文字发送。
  • 用户界面测试

您的问题可能是指最后一部分,但为了正确实施,您必须将单元测试分解为以下主题。

至于UI测试,有很多工具,我最喜欢的是puppeteer

答案 2 :(得分:0)

您需要使用expressjs在服务器上创建端点,将其公开到互联网,然后通过请求从您的客户端调用它。