i am trying to build a video chat web application using laravel for backend and reactjs for frontend. i tried to find the errors here, but i couldn't. please help me to fix my errors.
Errors that are showing:
1/ POST http://localhost/pusher/auth 404 (Not Found)
2/ Pusher : : ["Error: Unable to retrieve auth string from auth endpoint - received status: 404 from /pusher/auth. Clients must be authenticated to join private or presence channels. See: https://pusher.com/docs/authenticating_users"]
My Code from "resources/js/components/App.js"
setupPusher(){
Pusher.logToConsole = true;
this.pusher = new Pusher(APP_KEY,{
authEndpoint: '/pusher/auth',
cluster: 'ap2',
auth:{
params: this.user.id,
headers:{
'X-CSRF-Token': window.csrfToken
}
}
});
this.channel = this.pusher.subscribe('presence-video-channel');
this.channel.bind(`clnt-signal-${this.user.id}`,(signal) => {
let peer = this.peers[signal.userId];
// if peer is not already exists, we got an incoming call
if(peer == undefined){
this.setState({otherUserId: signal.userId});
peer = this.startPeer(signal.userId, false);
}
peer.signal(signal.data);
});
}
My Code from "routes/web.php"
Route::post('/pusher/auth', [App\Http\Controllers\HomeController::class, 'authenticate']);
My Code from "app/Http/Controllers/HomeController.php"
public function authenticate(Request $request){
$socketId = $request->socket_id;
$channelName = $request->channel_name;
$pusher = new Pusher('a384f250f86af1f16f98', 'd30d380941bdec2e4e55', '1147033', [
'cluster' => 'ap2',
'useTLS' => true
]);
$presence_data = ['name' => auth()->user()->name];
$key = $pusher->presence_auth($channelName, $socketId, auth()->id(), $presence_data);
return response($key);
}
I am trying to create a new row in an existing Azure MSSQL database through my node/angular app. The GET request fires correctly, and the form I am using to generate the data generates the JSON correctly from what I can tell, but when the POST function fires, I get the following error:
Trace: { RequestError: JSON text is not properly formatted. Unexpected character 'o' is found at position 1.
at RequestError (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\tedious\lib\errors.js:34:12)
at Parser.<anonymous> (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\tedious\lib\connection.js:614:36)
at Parser.emit (events.js:182:13)
at Parser.<anonymous> (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\tedious\lib\token\token-stream-parser.js:54:15)
at Parser.emit (events.js:182:13)
at addChunk (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\readable-stream\lib\_stream_readable.js:291:12)
at readableAddChunk (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\readable-stream\lib\_stream_readable.js:278:11)
at Parser.Readable.push (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\readable-stream\lib\_stream_readable.js:245:10)
at Parser.Transform.push (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\readable-stream\lib\_stream_transform.js:148:32)
at doneParsing (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\tedious\lib\token\stream-parser.js:110:18)
message:
'JSON text is not properly formatted. Unexpected character \'o\' is found at position 1.',
code: 'EREQUEST',
number: 13609,
state: 4,
class: 16,
serverName: 'xxxxxxx',
procName: 'createReport',
lineNumber: 5 }
at Object.fnOnError (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\express4-tedious\index.js:104:25)
at Request.userCallback (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\express4-tedious\index.js:59:64)
at Request._this.callback (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\tedious\lib\request.js:60:27)
at Connection.endOfMessageMarkerReceived (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\tedious\lib\connection.js:1922:20)
at Connection.dispatchEvent (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\tedious\lib\connection.js:1004:38)
at Parser.<anonymous> (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\tedious\lib\connection.js:805:18)
at Parser.emit (events.js:182:13)
at Parser.<anonymous> (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\tedious\lib\token\token-stream-parser.js:54:15)
at Parser.emit (events.js:182:13)
at addChunk (C:\Users\jlea\Desktop\Code\tnplan-boot\node_modules\readable-stream\lib\_stream_readable.js:291:12)
events.js:167
throw er; // Unhandled 'error' event
^
Here is my app.js code:
const express = require('express');
const config = require('config');
const bodyParser = require('body-parser');
const tediousExpress = require('express4-tedious');
const cors = require('cors');
const path = require('path');
const app = express();
app.use(function (req, res, next) {
req.sql = tediousExpress(config.get('connection'));
next();
});
const corsOptions = {
origin: '*',
optionsSuccessStatus: 200
};
app.use(express.static(__dirname + '/dist/tnplan-boot'));
app.use(bodyParser.json());
app.options('*', cors(corsOptions));
app.use('/monthlyReport', require('./routes/monthlyReport'));
// "index" route, which serves the Angular app
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, '/dist/tnplan-boot/index.html'));
});
// catch 404 and forward to error handler
app.use(function (req, res, next) {
const err = new Error('Not Found: ' + req.method + ":" + req.originalUrl);
err.status = 404;
next(err);
});
app.set('port', process.env.PORT || 8080);
const server = app.listen(app.get('port'), function () {
console.log('Express server listening on port ' + server.address().port);
});
module.exports = app;
and my sql routes code:
const router = require('express').Router();
const TYPES = require('tedious').TYPES;
/* GET reports. */
router.get('/', function (req, res) {
req.sql("select * from jacksonwaste for json path")
.into(res, '[]');
});
/* GET single report. */
router.get('/:id', function (req, res) {
req.sql("select * from jacksonwaste where id = #id for json path, without_array_wrapper")
.param('id', req.params.id, TYPES.Int)
.into(res, '{}');
});
/* POST create report. */
router.post('/', function (req, res) {
req.sql("exec createReport #report")
.param('report', req.body, TYPES.NvarChar)
.exec(res)
console.log(req.body);
});
/* PUT update report. */
router.put('/:id', function (req, res) {
req.sql("exec updateReport #id, #report")
.param('id', req.params.id, TYPES.Int)
.param('report', req.body, TYPES.NvarChar)
.exec(res);
});
/* DELETE single report. */
router.delete('/:id', function (req, res) {
req.sql("delete from jacksonwaste where id = #id")
.param('id', req.params.id, TYPES.Int)
.exec(res);
});
module.exports = router;
and finally, my mssql stored procedure code:
/****** Object: StoredProcedure [dbo].[createReport] Script Date: 8/15/2018 9:13:31 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[createReport](#report nvarchar(max))
as begin
SET NOCOUNT ON
insert into jacksonwaste (reportuser, reportdate, percentcomp, err, errdate, acquisition, acqdate, pns, pnsdate, bidtabs, bidtabsdate, constructionstart, constartdate, constructionend, conenddate, monitored, monitorready,
contractoractivity, lastcafsubmission, mostrecentinvoice, phases, phaseupdate, hasoccured, willoccur, issues, tnecdhelp)
select *
from OPENJSON(#report)
WITH (
reportuser nvarchar(128),
reportdate date,
percentcomp int,
err bit,
errdate date,
acquisition bit,
acqdate date,
pns bit,
pnsdate date,
bidtabs bit,
bidtabsdate date,
constructionstart bit,
constartdate date,
constructionend bit,
conenddate date,
monitored bit,
monitorready bit,
contractoractivity bit,
lastcafsubmission date,
mostrecentinvoice date,
phases bit,
phaseupdate nvarchar(1000),
hasoccured nvarchar(1000),
willoccur nvarchar(1000),
issues nvarchar(1000),
tnecdhelp nvarchar(1000)
)
end
EDIT: added the JSON object that is being delivered to the sql request to show that there's no unexpected character that I can see:
{ reportuser: 'john',
reportdate: '2018-08-11',
percentcomp: '4',
err: true,
pns: true,
pnsdate: '2018-08-04',
errdate: '2018-08-16',
constructionstart: true,
constartdate: '2018-08-29',
lastcafsubmission: '2018-08-23',
mostrecentinvoice: '2018-08-24',
phaseupdate: 'test',
hasoccured: 'test',
willoccur: 'test',
issues: 'test',
tnecdhelp: 'test' }
Where am I going wrong?
For the record, in hopes this helps someone in the future:
I recently had a very similar issue (Exact same RequestError) and found out that I was passing the JSON as an object, whereas express4-tedious was expecting a string. JSON.stringify(req.body) did the trick.
In other words, changing the equivalent of your
req.sql("exec updateReport #id, #report")
.param('id', req.params.id, TYPES.Int)
.param('report', req.body, TYPES.NvarChar)
.exec(res);
to
req.sql("exec updateReport #id, #report")
.param('id', req.params.id, TYPES.Int)
.param('report', JSON.stringify(req.body), TYPES.NvarChar)
.exec(res);
solved my problem.
Client side code is as below
$scope.mbr= function(event){
var formdata = new FormData();
var reader = new FileReader();
var url = '/mbr_replace' ;
var upload_file = $(event.target[0].files[0];
formdata.append('mbrpdf',upload_file );
$http.post(url,formdata).success(function(response){alert("Got Response!!!!!!");
});
}
server side code is as below
app.post('/mbr_replace', isLoggedIn,upload.single('mbrpdf'),users.replace_pdf, maintain.userstudys, function(req,res){
res.send("Succeed !!!")
});
error
SyntaxError: Unexpected token -
at parse (D:\ManiKandan\Heta_Dev_3030\node_modules\body-parser\lib\types\json.js:82:15)
at D:\ManiKandan\Heta_Dev_3030\node_modules\body-parser\lib\read.js:116:18
at invokeCallback (D:\ManiKandan\Heta_Dev_3030\node_modules\raw-body\index.js:262:16)
at done (D:\ManiKandan\Heta_Dev_3030\node_modules\raw-body\index.js:251:7)
at IncomingMessage.onEnd (D:\ManiKandan\Heta_Dev_3030\node_modules\raw-body\index.js:307:7)
at emitNone (events.js:86:13)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickDomainCallback (internal/process/next_tick.js:128:9)
I have a chat done in nodejs, Express, socket.io and angular. It works well but disconnects sometimes and at random times. Generally the connection lasts no more than 2 minutes. I get several net :: ERR_CONNECTION_TIMED_OUT on the console.
PS.: I'm using apache 2.2 on CentOS with certified ssl.
Any tips?
My server.js header is below
#!/bin/env node
var express = require('express'),
path = require('path'),
app = express(),
logger = require('morgan'),
_m = require("./models/Message"),
Message = _m.m,
NewMessage = _m.n,
Group = _m.g,
Online = _m.o,
DeletedMessage = _m.d,
LastMessage = _m.l,
_mTASK = require("./models/Task"),
_Task = _mTASK.t,
TaskComment = _mTASK.c,
TaskLog = _mTASK.l,
TaskModel = _mTASK.m,
TaskNotification = _mTASK.n,
_d = require("./lib/Connection");
app.use(logger('dev'));
app.set('port', 3000);
app.set('ipaddr', "127.0.0.1");
var server = require('http').createServer(app);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
server.listen(app.get('port'), app.get('ipaddr'), function() {
console.log('Express server listening on IP: ' + app.get('ipaddr') + ' and port ' + app.get('port'));
});
var io = require("socket.io")(server);
io.set("origins", 'https://meusite.me:*');
io.set('transports', ['polling', 'websocket']);
A bit of socket.io background
Server sends a heartbeat to the client every X seconds where X == the
heartbeat interval configuration value.
If the client fails to respond, socket considers the connect dead
Client waits for a heartbeat from the server every N seconds where N == the heartbeat timeout configuration value.
Both of these values are set on the server with heartbeat timeout being sent to the client when an individual connection is opened.
Given the file above, you could set the heartbeat timeout with something like ...
//WARNING io.set() has been depricated
var io = require("socket.io")(server);
io.set('heartbeat interval', '30000');
io.set('heartbeat timeout', '45000');
io.set("origins", 'https://meusite.me:*');
io.set('transports', ['polling', 'websocket']);
//Setting your server configuration is now done via ..
var socket = require('socket.io')({
// options go here
'configOption': 'configValue';
});
I have the following code.
var express = require('express');
var app = express();
var path = require('path');
var pg = require('pg');
var conString = "postgres://user:password#endpoint:5432/StudentRecords";
//this initializes a connection pool
//it will keep idle connections open for a (configurable) 30 seconds
//and set a limit of 20 (also configurable)
var client = new pg.Client(conString);
client.connect(function(err) {
if(err) {
return console.error('could not connect to postgres', err);
}
else{
console.log("asdfaf")
}
});
client.connect();
It shows cannot connect to postgres. But when I try connecting from the terminal using
psql --host=endpoint --port=5432 --username xxxxx --password --dbname=StudentRecords
I can connect. Why is the code not working? Error I am getting is:
could not connect to postgres [Error: Connection terminated]